Send Nagios notifications to a Telegram Messenger channel.
This tutorial explains how to create a Telegram bot. You'll need the chat_id
and auth_key
for the next section.
This guide has been written for Debian. Some commands might slightly change depending on your distribution.
Clone the repository:
git clone https://github.com/jouir/notify-by-telegram.git /opt/notify-by-telegram
Install dependencies using pip:
pip install -r requirements.txt
Or via the package manager:
sudo apt install python3-jinja2 python3-requests python3-jsonschema
Copy and update the configuration file example:
cp -p config.example.json telegram.json
vim telegram.json
sudo mv telegram.json /etc/nagios4/telegram.json
sudo chown root:nagios /etc/nagios4/telegram.json
sudo chmod 640 /etc/nagios4/telegram.json
Ensure Nagios reads the configuration file:
echo "cfg_file=/opt/notify-by-telegram/nagios.cfg" >> /etc/nagios4/nagios.cfg
Then reload service:
systemctl reload nagios4
Format used is JSON with the following keys:
chat_id
: where to send message on Telegramauth_key
: key used to authenticate on Telegramhost_template
(optional): path to Markdown template file used for sending host notificationsservice_template
(optional): path to Markdown template file used for sending service notifications
Errors logs can be set with the --logfile
argument.
Example:
tail -f /var/log/nagios4/telegram.log
Log level can be raised using --verbose
or even more with --debug
arguments.
notify-by-telegram
script uses the MarkdownV2
format to generate Telegram messages.
Jinja is used for templating (eg. replace {{host_name}}
placeholders by the value submitted by Nagios).
Default host and service templates can be found in the templates directory.
They can be overriden in the configuration file:
{
"host_template": "/etc/nagios4/host.md.j2",
"service_template": "/etc/nagios4/service.md.j2"
}
Both options are optional.
Variables replaced in the host template:
notification_type
(=$NOTIFICATIONTYPE$
)host_name
(=$HOSTNAME$
)host_state
(=$HOSTSTATE$
)host_address
(=$HOSTADDRESS$
)host_output
(=$HOSTOUTPUT$
)long_date_time
(=$LONGDATETIME$
)
Variables replaced in the service template:
notification_type
(=$NOTIFICATIONTYPE$
)service_desc
(=$SERVICEDESC$
)host_alias
(=$HOSTALIAS$
)host_address
(=$HOSTADDRESS$
)service_state
(=$SERVICESTATE$
)long_date_time
(=$LONGDATETIME$
)service_output
(=$SERVICEOUTPUT$
)
Contributions are welcomed! Feel free to update the code and create a pull-request.
Be sure to lint the code before:
docker build -t pre-commit .
docker run -it -v $(pwd):/mnt/ --rm pre-commit bash
# cd /mnt/
# pre-commit run --all-files
# exit