vlambda博客
学习文章列表

自动运维|logstash收集syslog及保存实践


各位新朋友~记得先点蓝字关注我哦~

自动运维|logstash收集syslog及保存实践


自动运维|logstash收集syslog及保存实践

什么是logstash?



ELK号称日志聚合分析全家桶,三个字母分别代表Elasticsearch、Logstash、Kibana,Elasticsearch侧重数据的搜索、分析和存储,Kibana主要是为Elasticsearch提供可视化的web操作页面,Logstash能动态地采集、转换和传输数据,可收集并处理日志数据并发送到Elasticsearch(或者数据库存储等)。



自动运维|logstash收集syslog及保存实践

Logstash数据处理过程



Logstash数据处理过程主要包括:Inputs、Filters和Outputs,每个过程都有丰富的插件可供使用,可以方便处理多种数据源、数据格式并输出到多种存储中。


Inputs用于从数据源接收、获取数据,常见插件如file、syslog、redis、beats等。


Filters用于转换、处理数据,常见插件如grok、mutate、drop、ruby等。


Outputs用于数据输出,常见插件如elasticsearch、file等。


另外,Codecs作为一个单独组件,可以用于Inputs、Outputs流程中,对数据进行编码处理,常见插件如json、multiline。


以上数据处理过程及插件使用可以通过配置方便组合选用,适配多种应用场景。


自动运维|logstash收集syslog及保存实践

应用场景: Logstash收集syslog日志,

并保存到MySQL数据库



syslog日志数据格式说明:


自动运维|logstash收集syslog及保存实践


数据接收配置:


Logstash接收数据采用syslog插件,接收端口为514,默认使用tcp协议,配置如下:

自动运维|logstash收集syslog及保存实践


数据转换配置:


Logstash接收到的syslog消息内容示例如下:

XXX SYS1~2020-05-22T09:30:00~APP1~error~数据异常。


通过filter配置,将日志信息中的各个字段提取出来,这里使用ruby进行解析,还有grok等其他插件也可实现此功能,具体配置如下:

自动运维|logstash收集syslog及保存实践


以上代码整体逻辑是: 


- 将日志信息用分隔符“~”切分开。


- 将切分后的字段与字段key组合成字典格式,生成这样的格式{"header": "XXX SYS1", "time": "2020-05-22T09:30:00", ......}    


 - 如果格式符合,将如上字典内容添加到event对象中,并在event对象中的tags数组中增加“_sys1”字符串。


数据输出配置:



自动运维|logstash收集syslog及保存实践


通过rsyslog上报syslog信息,可以看到输出结果如下:


1. stdout标准输出情况:

自动运维|logstash收集syslog及保存实践


其中,字段message为输入原始日志信息,字段header、time、type、level、info字段为日志数据提取信息。


2.mysql数据库存储情况

自动运维|logstash收集syslog及保存实践


美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。