Instalar downdetector no Zabbix
Versão do Zabbix: 6 e Debian 11
Levando em consideração que já tenha o zabbix instalado no Debian, vamos seguir com a instalação do Downdetector!
Precisamos ter no servidor do zabbix essas dependências instaladas!
Python 3
beautifulsoup4
cloudscraper
requests
openssl 1.1.1
Instale no seus servidor
apt install python3-pip pip3 install bs4 pip3 install requests pip3 install cloudscraper
Se tiver o pip3 já instalado, so baixar as dependências!pip3 install requirements.txt
Vamos criar o script no seguinte caminho:
nano /usr/lib/zabbix/externalscripts/downdetector.py
Em seguida coloque todo esse código abaixo no arquivo downdetector.py
#!/usr/bin/python3 ######################################### # # # Author: Gabriel Padilha # # Email: gabrielvargaspadilha@gmail.com # # # ######################################### import sys import ssl import re import random from bs4 import BeautifulSoup if ssl.OPENSSL_VERSION_INFO[0] < 1 or ssl.OPENSSL_VERSION_INFO[1] < 1 or ssl.OPENSSL_VERSION_INFO[2] < 1: user_agent_list = [ # Chrome 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 ' 'Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 ' 'Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 ' 'Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 ' 'Safari/537.36', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 ' 'Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 ' 'Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 ' 'Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 ' 'Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 ' 'Safari/537.36', # Firefox 'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)', 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)', 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; ' '.NET CLR 3.5.30729) ' ] import requests craw = "requests" else: import cloudscraper craw = "cloudscraper" PARAMS = { 'Relatórios de usuários indicam que não há problemas': 'success', 'Relatórios de usuários indicam potenciais problemas': 'warning', 'Relatórios de usuários indicam problemas': 'danger' } def request(dd_site): url = "https://downdetector.com.br/fora-do-ar/{}/".format(dd_site) if not craw: print(0) exit() elif craw == "cloudscraper": scraper = cloudscraper.create_scraper() return scraper.get(url) else: return requests.get(url, headers={'User-Agent': random.choice(user_agent_list)}) def parse_result(status_text): status_text = status_text.strip() if status_text == 'success': status_number = 1 elif status_text == 'warning': status_number = 2 elif status_text == 'danger': status_number = 3 else: status_number = 0 print(status_number) exit() if __name__ == '__main__': if len(sys.argv) < 2: print("Informe o site que gostaria de verificar") sys.exit(1) site = sys.argv[1] response = request(site) if response.status_code != 200: print(0) exit() try: bs = BeautifulSoup(response.text, 'html.parser') dataParse = bs.find("div", {"class": "entry-title"}) status = dataParse.text.strip() result = None if not status: raise ValueError('') for param in PARAMS: if re.compile(r"{}.*".format(param)).match(status): result = PARAMS[param] if not result: raise ValueError('') parse_result(result) except Exception as err: failover = re.compile(".*status: '(.*)',.*", re.MULTILINE) failover_status = failover.findall(response.text).pop() parse_result(failover_status)
Vamos criar agora o script de descoberta:
Crie o arquivo:
nano /usr/lib/zabbix/externalscripts/downdetectorDiscovery.py
Em seguida coloque o código abaixo no arquivo downdetectorDiscovery.py
#!/usr/bin/python3 import os import sys import json FILE = "/usr/lib/zabbix/externalscripts/downdetectorlist.list" if not os.path.isfile(FILE): print("File not found") sys.exit() file = open(FILE, "r") data = { "data": [] } for line in file.readlines(): line_data = line.rstrip().split(';') if line_data[0] == '1': dic = {"{#SITE_ID}": line_data[1], "{#SITE_NOME}": line_data[2]} data['data'].append(dic) print(json.dumps(data))
Vamos criar agora a lista dos sites:
nano /usr/lib/zabbix/externalscripts/downdetectorlist.list
E cole todo o código abaixo no arquivo:
0;alelo;Alelo 0;algar;Algar 0;alog;Alog 0;amazon;Amazon 1;amazon-prime-instant-video;Amazon Prime Video 1;aws-amazon-web-services;Amazon Web Services 0;america-net;America Net 0;anthem;Anthem 0;anydesk;Anydesk 0;apex-legends;Apex Legends 0;app-store;App Store 0;apple-store;Apple Store 0;avianca;Avianca 0;voeazul;Azul 0;bcb;Banco Central do Brasil 0;banco-do-brasil;Banco do Brasil 0;banco-inter;Banco Inter 0;banco-itau;Banco Itaú 0;banco-safra;Banco Safra 0;banco-santander;Banco Santander 0;banestes;Banestes 0;banrisul;Banrisul 0;battlefield;Battlefield 0;betfair;Betfair 0;binance;Binance 0;bing;Bing 0;battle-net;Blizzard Battle.net 0;bradesco;Bradesco 0;brisanet;Brisanet 0;buscape;Buscapé 0;c6-bank;C6 Bank 0;cabo-telecom;Cabo Telecom 0;cabonnet;Cabonnet 1;caixa;Caixa Econômica Federal 0;call-of-duty;Call of Duty 0;claro;Claro 0;clash-of-clans;Clash of Clans 0;clash-royale;Clash Royale 0;clear-corretora;Clear 0;cloudflare;Cloudflare 0;clusterweb;Clusterweb 0;copeltelecom;Copel Telecom 0;correios;Correios 0;counter-strike;Counter-Strike 0;cedit-suisse;Credit Suisse 0;crunchyroll;Crunchyroll 0;dataprev;Dataprev 0;dead-by-daylight;Dead By Daylight 0;deezer;Deezer 0;destiny;Destiny 0;discord;Discord 0;dota-2;Dota 2 0;dropbox;Dropbox 0;ea;EA 0;ebay;eBay 0;ecac;eCAC 0;embratel;Embratel 0;enem;Enem 0;epic-games-store;Epic Games Store 0;escape-from-tarkov;Escape from Tarkov 0;esocial;eSocial 0;faceapp;Faceapp 1;facebook;Facebook 1;facebook-messenger;Facebook Messenger 0;facetime;Facetime 0;feedly;Feedly 0;fifa;Fifa 0;for-honor;For Honor 0;fortnite;Fortnite 0;free-fire;Free Fire 0;garena;Garena 0;getnet;Getnet 0;github;GitHub 0;globo;Globo 0;globoplay;Globoplay 1;gmail;Gmail 0;go-daddy;Go Daddy 0;gol;Gol 0;google;Google 0;google-cloud;Google Cloud 0;google-drive;Google Drive 0;google-play;Google Play 0;gta5;GTA 5 0;global-village-telecom;GVT 0;hbo-go;HBO 0;hostgator;Hostgator 0;hostnet-br;Hostnet 0;hsbc;HSBC 0;icloud;iCloud 0;icq;ICQ 0;ifood;iFood 0;imessage;iMessage 0;instagram;Instagram 0;iti;ITI 0;itmnetworks;ITMNetworks 0;itunes;iTunes 0;jurassic-world-alive;Jurassic World Alive 0;kik;Kik 0;kinghost;KingHost 0;kraken;Kraken 0;league-of-legends;League of Legends 0;ligue-telecom;Ligue Telecom 0;line;Line 0;linkedin;LinkedIn 0;locaweb;Locaweb 0;mandic;Mandic 0;mercado-bitcoin;Mercado Bitcoin 1;mercado-livre;Mercado Livre 0;windows-azure;Microsoft Azure 0;teams;Microsoft Teams 0;multiplay;Multiplay 0;net;NET 1;netflix;Netflix 0;neverwinter;Neverwinter 0;nextel;Nextel 0;nota-fiscal-eletronica;Nota fiscal eletrônica 0;nubank;Nubank 0;office-365;Office 365 0;oi;Oi 0;olx;OLX 0;onedrive;OneDrive 0;origin;Origin 0;outlook;Outlook 0;overwatch;Overwatch 0;pagseguro;PagSeguro 0;path-of-exile;Path of Exile 0;paypal;Paypal 0;pinterest;Pinterest 0;playbattlegrounds;Player Unknown's Battlegrounds 0;playstation-network;Playstation Network 0;pokemon-go;Pokémon Go 0;policia-federal;Polícia Federal 0;porto-segura-conecta;Porto Seguro Conecta 0;qconcursos;QConcursos 0;rainbow-six;Rainbow Six 0;receite-federal;Receita Federal 0;red-dead-redemption;Red Dead Redemption 0;reddit;Reddit 0;roblox;Roblox 0;rocket-league;Rocket League 0;salesforcecom;Salesforce 0;sefaz;Sefaz 0;sercomtel;Sercomtel 0;sicoob;Sicoob 0;sicredi;Sicredi 0;sisu;SiSU 0;sky;SKY 0;skype;Skype 0;slack;Slack 0;snapchat;Snapchat 1;spotify;Spotify 0;steam;Steam 0;submarino;Submarino 0;superdigital;SuperDigital 0;teamviewer;Teamviewer 1;telegram;Telegram 0;terra;Terra 0;tim;TIM 0;tinder;Tinder 0;tribunal-superior-eleitoral;Tribunal Superior Eleitoral 0;twitch;Twitch 0;twitter;Twitter 0;uber;Uber 0;uber-eats;Uber Eats 0;udemy;Udemy 0;umbler;Umbler 0;uol;UOL 0;uolhost;UOLHost 0;uplay;Uplay PC 0;viber;Viber 0;vimeo;Vimeo 0;vivo;Vivo 0;vono;Vono 0;warframe;Warframe 0;waze;Waze 0;wechat;WeChat 1;whatsapp;Whatsapp 0;wikipedia;Wikipedia 0;world-of-warcraft;World of Warcraft 0;xbox-live;Xbox Live 0;xp-investimentos;XP Investimentos 0;yahoo;Yahoo 0;yahoo-mail;Yahoo Mail 1;youtube;Youtube 0;zello;Zello
Vamos dar permissão agora nesses arquivos que criamos!
chmod a+x /usr/lib/zabbix/externalscripts/downdetector*
Podemos fazer um teste se esta respondendo o site.
Vamos ver se o site vivo esta "vivo"!
/usr/lib/zabbix/externalscripts/downdetector.py vivo
Repare que na imagem abaixo me deu um resultado "1"
Sendo:
0 - SITE INATIVO
1 - SITE ATIVO
Agora basta importar os Templates no zabbix.
São 3:
zbx_export_hosts.xml
zbx_export_templates.xml
zbx_export_valuemaps.xml
Depois que importar os arquivos no seu ZABBIX, o mesmo deve aparecer informações parecidas com a imagem abaixo:
E pronto!
Só aguardar que vai começar a coletar dados!
Vou deixar abaixo um Template para grafana Parecido com esse:
Este artigo foi útil?
Que bom!
Obrigado pelo seu feedback
Desculpe! Não conseguimos ajudar você
Obrigado pelo seu feedback
Feedback enviado
Agradecemos seu esforço e tentaremos corrigir o artigo