TL;DR: O ingestão e atualizaçao dos dados foi feita com sucesso, a PoC terminou no ponto onde o Logstash para o OpenSearch não se mostrou interessante do ponto de vista de não ter recursos (que em pesquisa existem plugins do logstash para a versão proprietária do ElasticSearch) para calcular em novos campos no processo de atualização o tempo de duração dos eventos para facilitar o desenvolvimento de dashboards de apresentação de dados. Concluindo-se assim que seria mais interessante um python no lugar do logstash para executar funções de "update by query".
- Logstash para processamento dos dados vindos de triggers do real-time export do Zabbix
- OpenSearch para armazenamento e pesquisa
- OpenSearch Dashboards para analise de dados e dashboard
-
Usado o projeto zabbix-lab
-
Copiados todos os arquivos deste gist para um "diretório 'zabbix-opensearch' vizinho" do zabbix-lab para usar a pasta "../zabbix-opensearch/data" compartilhada na montagem do volumes dos containeres docker
-
Adicionados 3 variáveis "environments" no service zabbix-server do arquivo docker-compose.yml ficando assim:
environment: - DB_SERVER_PORT=5432 - DB_SERVER_HOST=postgresql - POSTGRES_DB=zabbix - POSTGRES_USER=zabbix - POSTGRES_PASSWORD=zabbix - ENABLE_TIMESCALEDB=true - ZBX_STARTREPORTWRITERS=2 - ZBX_WEBSERVICEURL=http://zabbix-reports:10053/report - ZBX_EXPORT=/var/lib/zabbix/export/ - ZBX_EXPORTFILESIZE=1G - ZBX_EXPORTTYPE=events
-
Adicionado o volume para os arquivos ndjson do real-time exporter no service zabbix-server do arquivo docker-compose.yml ficando assim (caso não seja feito o merge dos docker-compose.yml, corrigir aqui o caminho para os dados de real-time export):
volumes: - ./zabbix/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro - ../zabbix-opensearch/data:/var/lib/zabbix/export
-
Após iniciados os testes:
- Foi configurado um item de Zabbix Trapper numérico simples
- Foi configurada uma trigger de baseado no item de teste Trapper para alertar em last(/Zabbix server/Zabbix test)>10 e recuperar em last(/Zabbix server/Zabbix test)<10
- Testes executados com um comando de zabbix_sender, quando o "-o" for maior que 10 gera a trigger e quando menor que 10 normaliza a trigger:
/usr/bin/zabbix_sender --zabbix-server zabbix-server --host "Zabbix server" -k zabbixtest -o 8
-
Abrindo o http://opensearch-dashboards:5601 e logando com as credenciais padrão admin:admin é possível adicionar o index-pattern "zabbix-triggers" com o @timestamp como campo de linha de tempo, e no discover verificar a adição do evento na geração do problem e a atualização do evento na geração do recover.
-
O ingestão e atualizaçao dos dados foi feita com sucesso, a PoC terminou no ponto onde o Logstash para o OpenSearch não se mostrou interessante do ponto de vista de não ter recursos (que em pesquisa existem plugins do logstash para a versão proprietária do ElasticSearch) para calcular em novos campos no processo de atualização o tempo de duração dos eventos para facilitar o desenvolvimento de dashboards de apresentação de dados. Concluindo-se assim que seria mais interessante um python no lugar do logstash para executar funções de "update by query".
- Alterar no arquivo o caminho para o diretório com os arquivos de real-time export do Zabbix ou apontar/montar o local indicado:
-
Padrão:
ZABBIX_FILE_PATH=./data
-
Alteração:
ZABBIX_FILE_PATH=/ALTERAR_O_PATH/AQUI
-
-
Iniciar o ambiente opensearch no docker:
docker-compose up -d
- O docker-compose já sobe o sistema de dashboard no endereço http://localhost:5601 ou http://opensearch-dashboards:5601
- É possível acessar os dados carregados no índice "zabbix-triggers" no OpenSearch Dashboards
- Logue com usuário "admin" e senha "admin"
-
Mapeamentos definidos
- clock => time_start
- clock => @timestamp
- eventid => eventid_problem
- eventid => _id
- severity => severity
- name => trigger_name
- [hosts][host] => hostname
- [hosts][name] => hostdisplayname
- groups => groups
- tags => tags
- ns => REMOVIDO
-
Log Zabbix
{ "clock": 1650474058, "ns": 391767948, "value": 1, "eventid": 36, "name": "High swap space usage (less than 50% free)", "severity": 2, "hosts": [{ "host": "Zabbix server", "name": "Zabbix server" }], "groups": [ "Zabbix servers" ], "tags": [ { "tag": "scope", "value": "capacity" }, { "tag": "component", "value": "storage" } ] }
-
Mapeamentos definidos
- clock => time_finish
- eventid => eventid_recovery
- p_eventid => eventid_problem
- ns => REMOVIDO
-
Log Zabbix
{ "clock":1650409264, "ns":146613192, "value":0, "eventid":34, "p_eventid":33 }