本文来了解一下企业级日志解决方案ELK中的“L”(Logstash),没错,就是这个神奇小组件,用过的都知道,它是ELK不可缺少的组件,完成了输入(input),过滤(fileter),output(输出)工作,也是需要掌握的难点,说到这里 ,又爱又恨;“爱之好,恨之难”;这个Logstash拥有这强大的插件功能,除了帮我们过滤,高效的输出日志,还能帮我们与Zabbix监控相结合?
Logstashは、Webサービスログ、システムログ、カーネルログなどを収集できるさまざまな出力タイプをサポートしていますが、ログ出力があるため、エラーログの表示は絶対に避けられません。エラーログが表示されたら検索できます。 ELKを介して出てきますが、ELKはリアルタイムのアラーム機能を提供できません。これは少し恥ずかしいことです。ただし、LogstashプラグインをZabbixと組み合わせて、ログの監視を完了し、アラームをトリガーするためにアラーム(エラーなど)を必要とするログを収集できます。
まず、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.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]データ処理
[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]テストして開始
[root@localhost logstash]# nohup /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/
イベント構成ファイルが正しいかどうかわからない場合は、フォアグラウンドで実行してstdoutに出力できます。filebeatによって収集されたログが正常にフィルタリングされていることを確認してください。
stdout {codec => rubydebug}命令を出力端末に追加し、フォアグラウンドでテストを実行して、エラーログ出力を除外できるかどうかを確認します。効果は次のとおりです〜(この命令をコメントアウトして実行することを忘れないでください) ok後のバックグラウンドで)
[root@localhost logstash]# /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/
Zabbixモニタリングテンプレートは、アラームがトリガーされるまで作成されます
1.テンプレートを作成します
2.アプリケーションセットを作成し、[アプリケーションセット]-[アプリケーションセットの作成]をクリックします
3.監視項目を作成し、監視項目をクリックして監視項目を作成します
4.アラームトリガー、トリガーの作成
5.ログを収集するために作成したテンプレートを、ログを収集してアラームトリガーの効果を確認する必要があるホストに接続します。
テストアラート
SSHは192.168.37.147ログ収集ホストに接続し、意図的に間違ったパスワードを入力してシステムにエラーログを生成させ、zabbixエンドに送信するのに十分であることを確認します。以下は、フィルタリングしたエラーログ情報です。エラー」、「失敗」など〜これまでのところ、エラーログ出力は正常に収集されています〜
総括する
思考の流れを見てみましょう:
私たちのアーキテクチャは基本的に変更されていません。filebatがログを収集してkibanaメッセージキューにプッシュし、Logstashがログデータをプルして、処理後に最終的に転送します。これは、zabbixへの単なる転送出力です。これは機能を実現できます。コアヒーローはLogsatshプラグイン(logstash-output-zabbix)です。
ここで、ファイルビート収集端末のIPはzabbixモニタリングホストのIPに対応している必要があることに注意してください。対応していない場合、ログは渡されません〜
ちょっとしたトリックを共有してください:このコマンドを使用すると、zabbixで定義されたキー値をテストできます。失敗したゼロ以外の値が失敗を示している場合、次の出力は正常になります〜
[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:ローカルエージェントを指定します
-
-z:zabbixサーバーを指定します
- -k:キー値を指定します
心が落ち着きがなく、長い間落ち着かないときは、勉強する時です。なぜ勉強するのか、なぜ一生懸命働くのか。欲しいものはとても高いので頼むことができず、普通すぎて一生懸命勉強するしかないので、普通に異常なことをしてみてください〜