How can one implement service to be monitorable by icinga?

Hello folks,
If I am to write service process on Linux, in any language(C++, Java, Python…)
What should I do to ensure it is easily monitor-able by icinga: process alive, log, messages, etc…?
I see solutions/customizations for existing programs, but could not find know-how for new program if you want it to be monitor-able.
To be specific, I can create a few different solutions to monitor process alive, but I am not sure which one would best fit/scalable into icinga. I understand that icinga is flexible, but some trivial “hello world” monitor is good to start.

Thank you.

Take my answer with a bit of salt as I am a consultant and not a developer, but when I am asked the same question at a customer I typically recommend an API endpoint which gives monitoring information. Preferred format would be a Rest-API with JSON body, because I think I found a good Rest and JSON library in every programming language for writing a check plugin.