Zabbix monitora alertas de log anormais ELK

本文来了解一下企业级日志解决方案ELK中的“L”(Logstash),没错,就是这个神奇小组件,用过的都知道,它是ELK不可缺少的组件,完成了输入(input),过滤(fileter),output(输出)工作,也是需要掌握的难点,说到这里 ,又爱又恨;“爱之好,恨之难”;这个Logstash拥有这强大的插件功能,除了帮我们过滤,高效的输出日志,还能帮我们与Zabbix监控相结合?

Logstash suporta uma variedade de tipos de saída, que podem coletar logs de serviço da web, logs de sistema, logs de kernel, etc .; no entanto, como há saída de log, o aparecimento de logs de erro é definitivamente inevitável; quando os logs de erro aparecem, eles podem ser pesquisados por meio de ELK. Pode falar, mas ELK não pode fornecer função de alarme em tempo real, o que é um pouco embaraçoso. Mas não importa, o plugin Logstash pode ser combinado com Zabbix para coletar os logs que requerem alarmes (por exemplo: erro) para completar o monitoramento do log e disparar alarmes.

Primeiro instale o plug-in logstash-output-zabbix:

[root@localhost ~]# /usr/local/logstash/bin/logstash-plugin install logstash-output-zabbix     
Validating logstash-output-zabbix
Installing logstash-output-zabbix
Installation successful

[Filebeat] Terminal de coleta de log



filebeat.inputs:- type: log
  enabled: true
  paths:   - /var/log/secure   - /var/log/messages   - /var/log/cron
  fields:
    log_topic: system_log
processors: - drop_fields:
    fields: ["beat", "input", "source", "offset", "prospector"] #这里在filebeat中直接去掉不需要的字段。
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
name: 192.168.37.147        #这是日志输出标识,表明日志来自哪个主机,后面再logstash会用到。
output.kafka:
  enabled: true
  hosts: ["192.168.37.147:9092", "192.168.37.148:9092", "192.168.37.149:9092"]    #日志输出到kafka集群
  version: "0.10"
  topic: '%{[fields.log_topic]}' 
  partition.round_robin:
    reachable_only: true
  worker: 2
  required_acks: 1
  compression: gzip
  max_message_bytes: 10000000
logging.level: debug

[Logstash] Processamento de dados


Zabbix monitora alertas de log anormais ELK

[root@localhost ~]# vim /usr/local/logstash/config/etc/system_log.conf
input {
        kafka {
        bootstrap_servers => "192.168.37.147:9092,192.168.37.148:9092,192.168.37.149:9092"
        topics => ["system_log"]
        codec => "json"
        }
}

filter {    if [fields][log_topic] == "system_log" {    #指定filebeat产生的日志主题
             mutate {
             add_field => [ "[zabbix_key]", "oslogs" ]      #新增的字段,字段名是zabbix_key,值为oslogs。
             add_field => [ "[zabbix_host]", "%{[host][name]}" ]   #新增的字段,字段名是zabbix_host,值可以在这里直接定义,也可以引用字段变量来获取。这里的%{[host][name]获取的就是日志数据的来源IP,这个来源IP在filebeat配置中的name选项进行定义。
             }
         }
    grok {
             match => { "message" => "%{SYSLOGTIMESTAMP:message_timestamp} %{SYSLOGHOST:hostname} %{DATA:message_program}(?:\[%{POSINT:message_pid}\])?: %{GREEDYDATA:message_content}" } #这里通过grok对message字段的数据进行字段划分,这里将message字段划分了5个子字段。其中,message_content字段会在output中用到。
        }
        mutate {        #这里是删除不需要的字段
            remove_field => "@version"
            remove_field => "message"
        }
        date {      #这里是对日志输出中的日期字段进行转换,其中message_timestamp字段是默认输出的时间日期字段,将这个字段的值传给 @timestamp字段。
                match => [ "message_timestamp","MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
        }
}

output {        if [message_content]  =~ /(ERR|error|ERROR|Failed)/  {   #定义在message_content字段中,需要过滤的关键字信息,也就是在message_content字段中出现给出的这些关键字,那么就将这些信息发送给zabbix。
              zabbix {
                        zabbix_host => "[zabbix_host]"      #这个zabbix_host将获取上面filter部分定义的字段变量%{[host][name]的值
                        zabbix_key => "[zabbix_key]"        #这个zabbix_key将获取上面filter部分中给出的值
                        zabbix_server_host => "192.168.37.149"  #这是指定zabbix server的IP地址
                        zabbix_server_port => "10051"           #这是指定zabbix server的监听端口
                        zabbix_value => "message_content"              #定要传给zabbix监控项item(oslogs)的值, zabbix_value默认的值是"message"字段,因为上面我们已经删除了"message"字段,因此,这里需要重新指定,根据上面filter部分对"message"字段的内容划分,这里指定为"message_content"字段,其实,"message_content"字段输出的就是服务器上具体的日志内容。
                        }
                    }
}

[Logstash] Teste e inicie


[root@localhost logstash]# nohup /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/

Zabbix monitora alertas de log anormais ELK

Não tenho certeza se o arquivo de configuração do evento está correto, ele pode ser executado em primeiro plano e saída para stdout; verifique se os logs coletados pelo filebeat foram filtrados com êxito.
Adicione a instrução stdout {codec => rubydebug} ao terminal de saída, execute o teste em primeiro plano e veja se ele pode filtrar a saída do log de erros. O efeito é o seguinte ~ (Lembre-se de comentar esta instrução e executá-la no fundo depois de ok)

[root@localhost logstash]# /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/

Zabbix monitora alertas de log anormais ELK

O modelo de monitoramento Zabbix é criado até que o alarme seja acionado


1. Crie um modelo

Zabbix monitora alertas de log anormais ELK

2. Crie um conjunto de aplicativos, clique em Conjunto de aplicativos-Criar conjunto de aplicativos

Zabbix monitora alertas de log anormais ELK

3. Crie um item de monitoramento, clique no item de monitoramento para criar um item de monitoramento

Zabbix monitora alertas de log anormais ELK

4. Gatilho de alarme, criar gatilho

Zabbix monitora alertas de log anormais ELK

Zabbix monitora alertas de log anormais ELK

5. Conecte o modelo que criamos para coletar logs ao host que precisa coletar logs para verificar o efeito do acionamento do alarme.

Zabbix monitora alertas de log anormais ELK

Alerta de teste


O SSH se conecta ao host de coleta de log 192.168.37.147, insere deliberadamente a senha errada para fazer o sistema gerar um log de erro, verifique se é suficiente para enviar para o final do zabbix, a seguir estão as informações do log de erro que filtramos, como " erro "," Falha ", etc. ~ até agora Até agora, a saída do log de erros foi coletada com sucesso ~

Zabbix monitora alertas de log anormais ELK

Resumindo


Vamos dar uma olhada na linha de pensamento:

Nossa arquitetura está basicamente inalterada. Ainda assim, o filebat coleta logs e os envia para a fila de mensagens kibana e, em seguida, Logstash vai puxar os dados de log e, finalmente, transfere-os após o processamento; é apenas uma saída de transferência para o zabbix; isso função pode ser realizada, O herói principal é o plug-in Logsatsh (logstash-output-zabbix);

Deve-se notar aqui que o IP do terminal de coleta do filebeat deve corresponder ao IP do host de monitoramento zabbix, caso contrário, o log não passará ~

Compartilhe um pequeno truque: através deste comando você pode testar o valor-chave definido no zabbix; a seguinte saída torna-se normal ~, se o valor diferente de zero com falha indica falha

[root@localhost zabbix_sender]# /usr/local/zabbix/bin/zabbix_sender -s 192.168.37.147 -z 192.168.37.149 -k "oslogs" -o 1
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000081"
sent: 1; skipped: 0; total: 1
  • -s: Especifique o agente local

  • -z: especifica o servidor zabbix

  • -k: Especifique o valor-chave

Quando seu coração está inquieto e você não consegue se acalmar por muito tempo, é hora de estudar. Por que estudar e por que trabalhar muito? Porque as coisas que você quer são muito caras, você não pode pedir e você é muito comum, então você não pode fazer nada além de estudar bastante, apenas pensar, fazer coisas extraordinárias no comum ~

Acho que você gosta

Origin blog.51cto.com/15127501/2656739
Recomendado
Clasificación