Contents
Sobre
Zabbix é uma ferramenta de monitoramento de ativos computacionais, bastante robusta e expansível. Neste artigo será demonstrado como configurá-lo para enviar alertas através do telegram, que é um aplicativo de mensagens instantâneas disponível para Android, iOS, Windows Phone, OS X, Gnu/Linux e mais.
Ambiente
Este procedimento foi testado com servidor zabbix 2.2.x rodando no debian 7 (Wheezy) ou 8 (Jessie). Se você não estiver utilizando debian, visite a página do telegram-cli para obter instruções de quais bibliotecas instalar.
O commit utilizado foi o 3ced7bb, versão 1.3.1 do telegram-cli.
Dependências
Afim de sanar as dependências da compilação, abra um terminal e, como root, execute o comando:
# apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make
Instale o pacote git, caso não o tenha.
Baixar e compilar
# cd /usr/src # git clone --recursive https://github.com/vysheng/tg.git # cd tg # ./configure # make
A saída será parecida com esta:
root@debian8:/usr/src# git clone --recursive https://github.com/vysheng/tg.git Cloning into 'tg'... remote: Counting objects: 3513, done. remote: Total 3513 (delta 0), reused 0 (delta 0), pack-reused 3513 Receiving objects: 100% (3513/3513), 2.45 MiB | 726.00 KiB/s, done. Resolving deltas: 100% (2379/2379), done. Checking connectivity... done. Submodule 'tgl' (https://github.com/vysheng/tgl.git) registered for path 'tgl' Cloning into 'tgl'... remote: Counting objects: 702, done. remote: Total 702 (delta 0), reused 0 (delta 0), pack-reused 702 Receiving objects: 100% (702/702), 685.69 KiB | 697.00 KiB/s, done. Resolving deltas: 100% (490/490), done. Checking connectivity... done. Submodule path 'tgl': checked out 'b3dcce35110f5c995366318c2886065287815d09' Submodule 'tl-parser' (https://github.com/vysheng/tl-parser) registered for path 'tl-parser' Cloning into 'tl-parser'... remote: Counting objects: 32, done. remote: Total 32 (delta 0), reused 0 (delta 0), pack-reused 32 Unpacking objects: 100% (32/32), done. Checking connectivity... done. Submodule path 'tgl/tl-parser': checked out 'ec8a8ed7a4f22428b83e21a9d3b5815f7a6f3bd9' root@debian8:/usr/src# cd tg root@debian8:/usr/src/tg# ./configure checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for sqrt in -lm... yes checking for library containing clock_gettime... none required checking for library containing backtrace... none required checking for event_base_new in -levent... yes checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking event2/event.h usability... yes checking event2/event.h presence... yes checking for event2/event.h... yes checking for pkg-config... /usr/bin/pkg-config checking whether compiling and linking against OpenSSL works... yes checking if zlib is wanted... yes checking for inflateEnd in -lz... yes checking zlib.h usability... yes checking zlib.h presence... yes checking for zlib.h... yes checking for rl_save_prompt in -lreadline... yes checking for libconfig... enabled checking for config_init in -lconfig... yes checking for liblua... enabled checking for lua... /usr/bin/lua checking if /usr/bin/lua is a Lua interpreter... yes checking for lua version... 5.2 checking for lua platform... unknown checking for lua script directory... ${prefix}/share/lua/5.2 checking for lua module directory... ${exec_prefix}/lib/lua/5.2 checking if LUA_VERSION is defined... yes checking lua.h usability... no checking lua.h presence... no checking for lua.h... no checking lualib.h usability... no checking lualib.h presence... no checking for lualib.h... no checking lauxlib.h usability... no checking lauxlib.h presence... no checking for lauxlib.h... no checking luaconf.h usability... no checking luaconf.h presence... no checking for luaconf.h... no checking for Lua headers in... /usr/include/lua5.2 checking lua.h usability... yes checking lua.h presence... yes checking for lua.h... yes checking lualib.h usability... yes checking lualib.h presence... yes checking for lualib.h... yes checking lauxlib.h usability... yes checking lauxlib.h presence... yes checking for lauxlib.h... yes checking luaconf.h usability... yes checking luaconf.h presence... yes checking for luaconf.h... yes checking for Lua header version... 5.2 checking if Lua header version matches 5.2... yes checking if LUA_VERSION is defined... yes checking for library containing exp... none required checking for library containing dlopen... -ldl checking for library containing lua_load... -llua5.2 checking for libjansson... enabled checking for json_array_set_new in -ljansson... yes checking progname... default checking execinfo.h usability... yes checking execinfo.h presence... yes checking for execinfo.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking malloc.h usability... yes checking malloc.h presence... yes checking for malloc.h... yes checking netdb.h usability... yes checking netdb.h presence... yes checking for netdb.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking for unistd.h... (cached) yes checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking mach/mach.h usability... no checking mach/mach.h presence... no checking for mach/mach.h... no checking netinet/in.h usability... yes checking netinet/in.h presence... yes checking for netinet/in.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking termios.h usability... yes checking termios.h presence... yes checking for termios.h... yes checking for size_t... yes checking for uid_t in sys/types.h... yes checking for inline... inline checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking for stdlib.h... (cached) yes checking for GNU libc compatible realloc... yes checking for alarm... yes checking for endpwent... yes checking for memset... yes checking for memmove... yes checking for mkdir... yes checking for select... yes checking for socket... yes checking for strdup... yes checking for strndup... yes checking for uname... yes checking for __builtin_bswap32... yes configure: creating ./config.status config.status: creating Makefile config.status: creating config.h root@debian8:/usr/src/tg# make cat tgl/scheme.tl tgl/encrypted_scheme.tl tgl/binlog.tl tgl/append.tl tgl/mtproto.tl > auto/scheme.tl gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl/tl-parser -c -MP -MD -MF dep/tl-parser.d -MQ objs/tl-parser.o -o objs/tl-parser.o tgl/tl-parser/tl-parser.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl/tl-parser -c -MP -MD -MF dep/tlc.d -MQ objs/tlc.o -o objs/tlc.o tgl/tl-parser/tlc.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl/tl-parser -c -MP -MD -MF dep/crc32.d -MQ objs/crc32.o -o objs/crc32.o tgl/tl-parser/crc32.c gcc objs/tl-parser.o objs/tlc.o objs/crc32.o -L/usr/local/lib -L/usr/lib -L/usr/lib -rdynamic -ggdb -levent -ljansson -lconfig -lz -levent -lm -lreadline -llua5.2 -ldl -lssl -lcrypto -o bin/tl-parser bin/tl-parser -e auto/scheme.tlo auto/scheme.tl gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/generate.d -MQ objs/generate.o -o objs/generate.o tgl/generate.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/tools.d -MQ objs/tools.o -o objs/tools.o tgl/tools.c gcc objs/generate.o objs/tools.o -L/usr/local/lib -L/usr/lib -L/usr/lib -rdynamic -ggdb -levent -ljansson -lconfig -lz -levent -lm -lreadline -llua5.2 -ldl -lssl -lcrypto -o bin/generate bin/generate -g skip-header auto/scheme.tlo > auto/auto-skip.h || rm auto/auto-skip.h bin/generate -g fetch-header auto/scheme.tlo > auto/auto-fetch.h || rm auto/auto-fetch.h bin/generate -g store-header auto/scheme.tlo > auto/auto-store.h || rm auto/auto-store.h bin/generate -g autocomplete-header auto/scheme.tlo > auto/auto-autocomplete.h || rm auto/auto-autocomplete.h bin/generate -g types-header auto/scheme.tlo > auto/auto-types.h || rm auto/auto-types.h gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -c -MP -MD -MF dep/main.d -MQ objs/main.o -o objs/main.o main.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -c -MP -MD -MF dep/loop.d -MQ objs/loop.o -o objs/loop.o loop.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -c -MP -MD -MF dep/interface.d -MQ objs/interface.o -o objs/interface.o interface.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -c -MP -MD -MF dep/lua-tg.d -MQ objs/lua-tg.o -o objs/lua-tg.o lua-tg.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -c -MP -MD -MF dep/json-tg.d -MQ objs/json-tg.o -o objs/json-tg.o json-tg.c bin/tl-parser -E auto/scheme.tl 2> auto/scheme2.tl || ( cat auto/scheme2.tl && rm auto/scheme2.tl && false ) awk -f ./tgl/gen_constants_h.awk < auto/scheme2.tl > auto/constants.h bin/generate -g fetch-ds-header auto/scheme.tlo > auto/auto-fetch-ds.h || rm auto/auto-fetch-ds.h bin/generate -g free-ds-header auto/scheme.tlo > auto/auto-free-ds.h || rm auto/auto-free-ds.h bin/generate -g store-ds-header auto/scheme.tlo > auto/auto-store-ds.h || rm auto/auto-store-ds.h bin/generate -g print-ds-header auto/scheme.tlo > auto/auto-print-ds.h || rm auto/auto-print-ds.h gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/mtproto-common.d -MQ objs/mtproto-common.o -o objs/mtproto-common.o tgl/mtproto-common.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/mtproto-client.d -MQ objs/mtproto-client.o -o objs/mtproto-client.o tgl/mtproto-client.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/queries.d -MQ objs/queries.o -o objs/queries.o tgl/queries.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/structures.d -MQ objs/structures.o -o objs/structures.o tgl/structures.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/binlog.d -MQ objs/binlog.o -o objs/binlog.o tgl/binlog.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/tgl.d -MQ objs/tgl.o -o objs/tgl.o tgl/tgl.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/updates.d -MQ objs/updates.o -o objs/updates.o tgl/updates.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/tgl-net.d -MQ objs/tgl-net.o -o objs/tgl-net.o tgl/tgl-net.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/tgl-timers.d -MQ objs/tgl-timers.o -o objs/tgl-timers.o tgl/tgl-timers.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/tg-mime-types.d -MQ objs/tg-mime-types.o -o objs/tg-mime-types.o tgl/tg-mime-types.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/mtproto-utils.d -MQ objs/mtproto-utils.o -o objs/mtproto-utils.o tgl/mtproto-utils.c bin/generate -g skip auto/scheme.tlo > auto/auto-skip.c || rm auto/auto-skip.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-skip.d -MQ objs/auto-skip.o -o objs/auto/auto-skip.o auto/auto-skip.c bin/generate -g fetch auto/scheme.tlo > auto/auto-fetch.c || rm auto/auto-fetch.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-fetch.d -MQ objs/auto-fetch.o -o objs/auto/auto-fetch.o auto/auto-fetch.c bin/generate -g store auto/scheme.tlo > auto/auto-store.c || rm auto/auto-store.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-store.d -MQ objs/auto-store.o -o objs/auto/auto-store.o auto/auto-store.c bin/generate -g autocomplete auto/scheme.tlo > auto/auto-autocomplete.c || rm auto/auto-autocomplete.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-autocomplete.d -MQ objs/auto-autocomplete.o -o objs/auto/auto-autocomplete.o auto/auto-autocomplete.c bin/generate -g types auto/scheme.tlo > auto/auto-types.c || rm auto/auto-types.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-types.d -MQ objs/auto-types.o -o objs/auto/auto-types.o auto/auto-types.c bin/generate -g fetch-ds auto/scheme.tlo > auto/auto-fetch-ds.c || rm auto/auto-fetch-ds.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-fetch-ds.d -MQ objs/auto-fetch-ds.o -o objs/auto/auto-fetch-ds.o auto/auto-fetch-ds.c bin/generate -g free-ds auto/scheme.tlo > auto/auto-free-ds.c || rm auto/auto-free-ds.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-free-ds.d -MQ objs/auto-free-ds.o -o objs/auto/auto-free-ds.o auto/auto-free-ds.c bin/generate -g store-ds auto/scheme.tlo > auto/auto-store-ds.c || rm auto/auto-store-ds.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-store-ds.d -MQ objs/auto-store-ds.o -o objs/auto/auto-store-ds.o auto/auto-store-ds.c bin/generate -g print-ds auto/scheme.tlo > auto/auto-print-ds.c || rm auto/auto-print-ds.c gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/auto-print-ds.d -MQ objs/auto-print-ds.o -o objs/auto/auto-print-ds.o auto/auto-print-ds.c rm -f libs/libtgl.a && ar ruv libs/libtgl.a objs/mtproto-common.o objs/mtproto-client.o objs/queries.o objs/structures.o objs/binlog.o objs/tgl.o objs/updates.o objs/tgl-net.o objs/tgl-timers.o objs/tg-mime-types.o objs/mtproto-utils.o objs/tools.o objs/auto/auto-skip.o objs/auto/auto-fetch.o objs/auto/auto-store.o objs/auto/auto-autocomplete.o objs/auto/auto-types.o objs/auto/auto-fetch-ds.o objs/auto/auto-free-ds.o objs/auto/auto-store-ds.o objs/auto/auto-print-ds.o ar: creating libs/libtgl.a a - objs/mtproto-common.o a - objs/mtproto-client.o a - objs/queries.o a - objs/structures.o a - objs/binlog.o a - objs/tgl.o a - objs/updates.o a - objs/tgl-net.o a - objs/tgl-timers.o a - objs/tg-mime-types.o a - objs/mtproto-utils.o a - objs/tools.o a - objs/auto/auto-skip.o a - objs/auto/auto-fetch.o a - objs/auto/auto-store.o a - objs/auto/auto-autocomplete.o a - objs/auto/auto-types.o a - objs/auto/auto-fetch-ds.o a - objs/auto/auto-free-ds.o a - objs/auto/auto-store-ds.o a - objs/auto/auto-print-ds.o gcc objs/main.o objs/loop.o objs/interface.o objs/lua-tg.o objs/json-tg.o libs/libtgl.a -L/usr/local/lib -L/usr/lib -L/usr/lib -rdynamic -ggdb -levent -ljansson -lconfig -lz -levent -lm -lreadline -llua5.2 -ldl -lssl -lcrypto -o bin/telegram-cli root@debian8:/usr/src/tg#
Configurando
Copiando e criando os arquivos necessários.
# mkdir zabbix # cp bin/telegram-cli zabbix/ # cp tg-server.pub zabbix/ # cd zabbix
Crie o arquivo telegram.config com o seguinte conteúdo:
default_profile = "zabbix"; zabbix = { config_directory = "/usr/src/tg/zabbix/"; #test = false; #msg_num = true; #binlog_enabled = true; #log_level = 2; };
Execute o telegram-cli. Você será redirecionado para o console da ferramenta, indicado por um “>” no início de cada linha.
# ./telegram-cli --rsa-key tg-server.pub --config telegram.config change_user_group: can't find the user telegramd to switch to Telegram-cli version 1.3.1, Copyright (C) 2013-2015 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'. This is free software, and you are welcome to redistribute it under certain conditions; type `show_license' for details. Telegram-cli uses libtgl version 2.0.1 [/usr/src/tg/zabbix//downloads] create >
Pode-se digitar help para ver todos os comandos disponíveis.
Neste momento é necessário aguardar até que o texto phone number apareça. Quando isso ocorrer, digite o número de telefone que está cadastrado no telegram, no formato +55 (prefixo para o Brasil) seguido do DDD e número. Exemplo:
phone number: +551122223333 code ('call' for phone call): 35620 User Tobias Sette updated username User Tobias Sette updated photo User Tobias Sette online (was online [2015/05/20 06:55:30])
Um detalhe interessante: o código também pode ser recebido pelo aplicativo instalado no celular e na versão para desktop, bastando ter um deles instalado e aberto.
Execute os comandos contact_list e dialog_list para que o telegram-cli carregue sua lista de contatos e as conversas atuais.
Caso você queira que o zabbix envie a mensagem para um determinado usuário, execute user_info seguido do nome do contato conforme está na sua agenda. Se, por outro lado, você quiser enviar para um grupo, execute chat_info seguido do nome do grupo. Observe que a tecla TAB pode ser utilizada para autocompletar as palavras.
Exemplos:
> user_info Tobias_Sette User Tobias Sette updated photo User Tobias Sette updated name User Tobias Sette @usuarioTal (#1234567): real name: Tobias Sette phone: 551122223333 online (was online [2015/05/03 07:16:54])
> chat_info Empresa_123 Chat Empresa 123 updated admin Chat Empresa 123 updated members Chat Empresa 123 (id 1234567) members: Usuario Tal invited by Tobias Sette at [2015/05/14 02:48:45] Tobias Sette invited by Tobias Sette at [2015/05/14 02:48:45] admin User Tobias Sette offline (was online [2015/05/14 02:53:59])
Nota: nos nomes de contatos e grupos, espaços são transformados em underscore (_), cerquilhas (#) em arrobas (@) e contatos com mesmo nome tem um #1 acrescentado ao nome (exemplo: Gnu#1, Gnu#2).
Perceba que na quarta linha de cada exemplo é exibido o código do usuário ou grupo, 1234567 nestes casos. Guarde este número, ele será utilizado mais a frente, na interface do Zabbix.
Agora o telegram-cli está configurado para utilizar a sua conta. Podemos sair do console dele digitando safe_quit.
Integrando ao zabbix
Para enviar uma mensagem, é necessário iniciar o binário telegram-cli, esperar que ele conecte à rede e envie a mensagem. Nos meus testes isso levou cerca de 7-10 segundos. Utilizo há cerca de três meses e funciona bem nos ambientes que tenho, inclusive o envio simultâneo de mensagens.
Para fazer este processo, criaremos um script em /usr/src/tg/zabbix/telegram_standalone.sh com o seguinte conteúdo:
#!/bin/bash # See # https://github.com/gnumoksha/zabbix_utils/blob/master/gnu%2Blinux/alertscripts/ MAIN_DIRECTORY="/usr/src/tg/zabbix/" # Is better use: user#user_id. For example: user#141213 USER=$1 SUBJECT=$2 TEXT=$3 cd $MAIN_DIRECTORY if [[ $? -ne 0 ]]; then echo "Error to enter in the main directory" exit 1 fi ./telegram-cli -k tg-server.pub -c telegram.config -WR -U zabbix -e "msg $USER $SUBJECT" || exit 1 exit 0
Usando o comando chmod +x telegram_standalone.sh, aplique permissões de execução ao script.
Altere o dono do diretório do telegram-cli e atribua um shell ao usuário zabbix:
# chown -R zabbix: /usr/src/tg/ # usermod --shell /bin/bash zabbix
Inclua uma linha com o texto AlertScriptsPath=/usr/src/tg/zabbix/ no arquivo de configuração do servidor zabbix (e.g. /etc/zabbix/zabbix_server.conf). Após isso, reinicie o servidor.
Na interface web do Zabbix, vá em Administração -> Tipos de mídia. Na lateral direita, clique no botão Criar tipo de mídia e preencha conforme a imagem.
Agora vá em Administração -> Usuários, selecione o usuário que receberá as notificações via telegram, clique na aba Mídia e, por fim, clique em adicionar. Preencha de forma parecida com a da imagem.
Repare que no campo Enviar para é utilizado o código que obtemos anteriormente, precedido do texto user# para usuários ou chat# para grupos.
Está feito. Para testar você pode criar uma trigger do tipo {Zabbix server:agent.ping.last(0)}=1 e marcar a opção Geração de múltiplos eventos de INCIDENTE.
Muito obrigado ao Vitaly Valtman pelo belo software e por ceder parte do seu tempo ao esclarecimento de dúvidas.
Referência
https://github.com/vysheng/tg/blob/master/README.md
Histórico
- 03/05/2015 versão inicial
- 11/05/2015 adicionada a dica do @GabRF de como enviar os alertas para um grupo
- 14/05/2015 adicionado mais detalhes sobre o envio para grupos
- 20/05/2015 atualizado da versão 1.2.0 (commit) para a versão 1.3.1 (commit) do telegram-cli