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

因为我们的Logstash支持多种输出类型,能够收集web服务日志,系统日志,内核日志;但是;竟然是有日志输出,肯定避免不了错误(error)日志的出现;当Error日志出现的时候,虽然可以通过ELK查找出来,但是ELK不能实时提供报警,这就有点尴尬了,我们要做的就是能够像zabbix,nagios监控那样,不能要做到监控,还要做到报警,这一点,ELK只做到了监控,但是没有做到报警;不过没关系,我们的Logstash插件能够与zabbix结合起来,将需要告警 的日志收集起来(比如说有错误标识的日志)完成日志监控触发告警~

logstash支持多种输出介质,比如说syslog,http,tcp,elasticsearch,kafka等,如果我们将logstash收集的日志输出到zabbix告警,就必须要用到logstash-output-zabbix插件,通过这个插件将logstash与zabbix整合,logstash收集到的数据过滤出错误信息的日志输出到zabbix中,最后通过zabbix告警机制触发;

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

环境案例需求:

通过读系统日志文件的监控,过滤掉日志信息中的异常关键词,如ERR,error,Failed,warning等信息,将这些带有异常关键词的异常日志信息过滤出来,然后输出到zabbix,通过zabbix告警机制实现触发告警;下面环境是filebeat作为采集端;输出到kafaka消息队列,最后由logsatsh拉取日志并过滤,输出到zabbix

【filebeat】日志采集端

filebeat.inputs:
- type: logenabled: truepaths:- /var/log/secure- /var/log/messages- /var/log/cronfields:log_topic: system_log
processors:- drop_fields:fields: ["beat", "input", "source", "offset", "prospector"] #这里在filebeat中直接去掉不需要的字段。
filebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: false
name: 192.168.37.147        #这是日志输出标识,表明日志来自哪个主机,后面再logstash会用到。
output.kafka:enabled: truehosts: ["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: trueworker: 2required_acks: 1compression: gzipmax_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"字段输出的就是服务器上具体的日志内容。}}
}

[root@localhost logstash]# nohup /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/          #这里的--path.data指定词logstash进程的数据存储目录,用于在一个服务器上启动多个logstash进程环境

[测试]不确定事件配置文件是否正确,我们可以通过前台运行,输出stdout;验证filebeat收集的日志是够成功的过滤~

stdout {codec => rubydebug}    #我们将这条指令加入output输出端,前台运行测试,看是够能够过滤出来错误日志输出,效果如下~(ok之后记得将这条指令注释掉并后台运行哦)

# /usr/local/logstash/bin/logstash -f config/etc/system_log.conf --path.data=/tmp/

【zabbix-监控模板创建到 告警一触即发】

1.创建模板

将词模板链接到192.168.37.147上,创建的模板上的监控项就会在192.168.37.147上自动生效了,

2.创建应用集,点击应用集-创建应用集

3.创建监控项,点击监控项,创建监控项

4.告警触发,创建 触发器

将咱们创建的收集日志的模板连接到 需要收集日志的主机,验证告警触发效果

【模拟告警】

ssh连接192.168.37.147日志收集主机,故意输错密码,让系统产生错误日志,验证是够发送到zabbix端,下面便是我们过滤的错误日志信息,如“error”,"Failed"等~到目前为止,已经成功的收集到错误日志输出了~

【总结】

首先我们来捋一下思路:

我们的架构基本不变,仍然是filebat收集日志推送到kibana消息队列,然后由Logstash前去拉取日志数据,经过处理最后中转出去;只不过是中转输出到zabbix上面而已;能够实现这个功能的,最核心的功臣就是Logsatsh的插件(logstash-output-zabbix);

在这里需要注意的是:filebeat收集端的IP一定要与zabbix监控主机的IP相对应,否则日志是过不来的~

分享一个小技巧:通过该命令可以测试定义在zabbix上的键值;出现以下输出变为正常~,如果failed非零值表示失败

[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:指定本地agent端

-z:指定zabbix服务端

-k:指定键值

转载于:https://www.cnblogs.com/bixiaoyu/p/9595698.html

带你了解zabbix整合ELK收集系统异常日志触发告警~相关推荐

  1. 项目实战|史上最简单的springboot 整合elk教程,实现日志收集(带视频哦)

    配套视频教程已经上传 整合ELK-实现日志收集(知乎) 整合ELK-实现日志收集(CSDN) 项目源码已上传至 https://gitee.com/yangleliu/learning.git,免费索 ...

  2. Zabbix整合ELK实现日志数据的分析实时监控

    一,ELK和Zabbix的关系? ELK是一套组合的日志收集系统,由Elasticsearch.Logstash和Kibana三个软件组成,通过ELK可以收集系统日志.网站日志.应用系统日志等各种日志 ...

  3. SpringBoot非官方教程 | 第二十六篇: sprinboot整合elk,搭建实时日志平台

    转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/sprinboot25-elk/ 本文出自方志朋的博客 这篇文章主要介绍 ...

  4. ELK 收集 Java 后台日志

    01 Java 日志样式 Java日志的特点在于输出信息非常多,通常需要将多行日志信息拼成一个事件,所以需要多行匹配模式.由于Elasticsearch本身就是使用Java开发的,所以Java日志收集 ...

  5. Spring Boot整合ELK 处理为服务日志,妙!

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 developer.ibm.com 推荐:https://www.xttblog.com/?p=5 ...

  6. android应用开发中收集的异常日志解决方法记录

    这里主要是列出开发中收集的一些错误日志,以及解决方案,仅供参考,也有待解决的问题 1, ListView 中出现java.lang.IndexOutOfBoundsException: Invalid ...

  7. 基于Flume的美团日志收集系统(一)架构和设计

    背景 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团 ...

  8. 基于Flume的美团日志收集系统-----架构和设计

    问题导读: 1.Flume-NG与Scribe对比,Flume-NG的优势在什么地方? 2.架构设计考虑需要考虑什么问题? 3.Agent死机该如何解决? 4.Collector死机是否会有影响? 5 ...

  9. Zabbix与ELK整合实现对安全日志数据的实时监控告警

    微信公众号:运维开发故事,作者:double冬 1 ELK与ZABBIX有什么关系? ELK大家应该比较熟悉了,zabbix应该也不陌生,那么将ELK和zabbix放到一起的话,可能大家就有疑问了?这 ...

最新文章

  1. html5登录界面源代码_TwinCAT HMI,一款基于web的人机界面产品
  2. C语言实现牛顿-拉夫逊newton raphson求近似根roots(附完整源码)
  3. cisco 以太通道(端口聚合)配置样例
  4. JS编程:查找数组元素位置
  5. IDEA插件开发之基础篇
  6. 增长模型—评分卡模型
  7. 前端实现动画的方法总结
  8. 再说setlocale——关于区域名称
  9. 浪潮服务器装显卡和显卡驱动
  10. 计算机主机显卡在哪里,台式电脑显卡在哪个位置 台式机显卡拆卸方法
  11. MySQL中幻读是如何解决的
  12. 非接触IC卡读写模块MFRC530的工作原理及其应用
  13. python 005 __ 小斌文档 | 函数的定义和调用
  14. QCC---Host configure tools
  15. tcpdump命令帮助和示例
  16. 客户打开率高达90%的开发信标题该怎么写?(附赠模板)
  17. 洛谷4895 BZOJ3162 独钓寒江雪 树形dp 树哈希
  18. 串口通信与网口通信简介
  19. curl错误码大全curl_errno
  20. 批量给图片名字为递增数字

热门文章

  1. Codeforces 915 E Physical Education Lessons
  2. 项目开发一些注意事项
  3. 可工作的软件胜过面面俱到的文档
  4. [USACO] Beef McNuggets
  5. Spring基于状态机squirrel-foundation简单使用
  6. unity如何让canvas总是显示在所有层的最上方?
  7. sublime-text3 安装 emmet 插件
  8. python3动态加载模块的方法实现
  9. vim编辑器之按键说明
  10. 分享一个CSS3和jQuery实现的模糊显示效果 - 帮助你的访问用户更好的阅读内容