ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Logstash:实用 Logstash 收集 Syslog 日志指南

2022-02-09 13:30:13  阅读:445  来源: 互联网

标签:log Logstash syslog 我们 Syslog 日志 logstash


Syslog 是一种流行的标准,用于集中和格式化网络设备生成的日志数据。 它提供了一种生成和收集日志信息的标准化方式,例如程序错误、通知、警告、状态消息等。 几乎所有类 Unix 操作系统,例如基于 Linux 或 BSD 内核的操作系统,都使用负责收集和存储日志信息的 Syslog 守护进程。

 

它们通常存储在本地,但如果管理员希望能够从一个位置访问所有日志,它们也可以流式传输到中央服务器。 默认情况下,端口 514 和 UDP 用于传输 Syslog。在我之前的文章 “Beats:使用 Linux 系统上的 Rsyslog 收集日志并导入 Elasticsearch” 介绍了如何使用 Rsyslog 来进行流式方式进而把数据传入到 Elasticsearch 中去。

在今天的文章中,我们来讲述另外一种方式,也就是直接使用 Logstash 把 syslog 数据直接导入到 Elasticsearch 中。这也是对之前的那篇文章的补充吧。

了解 syslog

让我们看一下典型的 syslog 事件是什么样子的。 这些通常在本地收集在一个名为 /var/log/syslog 的文件中。

要显示前 10 行,我们将输入:

head -10 /var/log/syslog

上述命令是我在 Ubuntu 机器上打入的命令。是不是看起来有点眼花缭乱啊?

让我们来分析一下一个 syslog 日志的组成:

我们可以看到该行以时间戳开头,包括记录事件的月份名称、月份中的日期、小时、分钟和秒。 下一个条目是生成日志的设备的主机名。 接下来是创建日志条目的进程的名称、进程 ID 号,最后是日志消息本身。

当我们想要监控系统的健康状况或调试错误时,日志非常有用。 但是当我们要处理数十、数百甚至数千个这样的系统时,登录每台机器并手动查看 syslog 显然太复杂了。 通过将所有这些都集中到 Elasticsearch 中,可以更轻松地对所有记录的事件进行鸟瞰,仅过滤我们需要的内容,并在系统出现异常时快速发现。

Grok pattern

从上面的日志的格式上来看,我们可以看到它是一个非结构化的句子。我们可以通过 Logstash 的 Grok 过滤器来实现对这个日志的结构化。我们可以从上面的命令输出中拷贝其中的一行,然后让我们使用 Kibana 提供的工具来进行测试 Grok pattern:

在上面,我们使用了如下的 Grok pattern:

%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}

从上面的输出中,我们可以看出来经过 Grok 过滤器,它成功地把非结构化的信息转化为结构化的数据。这个便于我们分析数据。

配置 Logstash

我们接下来安装好自己的 Logstash。你可以参考文章 “如何安装 Elastic 栈中的 Logstash”。这里就不在赘述了。在我的 Ubuntu 机器上,我选择使用 DEB 格式的安装。我们在如下的地址创建一个文件:

/etc/logstash/conf.d/syslog.conf

input {
  file {
    path => ["/var/log/syslog"]
    type => syslog
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
 
 
filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}
 
output {
  elasticsearch {
    hosts => ["192.168.0.3:9200"]
    user => elastic
    password => password
  }
 
  stdout { codec => rubydebug }
}

请注意:在上面,我的 Elasticsearch 的地址是 192.168.0.3:9200。它的访问用户及密码是 elastic/password。这个你需要根据自己的配置进行修改。

配置完好 Logstash 后,我们需要重新启动 logstash 服务:

sudo service logstash restart

我们可以使用如下的命令来查看 logstash 服务的状态:

service logstash status

上面标明我们的服务运行正常。

我们也可以通过如下的命令来查看 logstash 服务的输出:

journalctl -u logstash

我们也可以通过如下的方式来查看 logstash 服务的调试信息:

 tail -f /var/log/logstash/logstash-plain.log

如果我们现在去查看上面的这个文件,我们会发现这样的错误信息:

 

显然,是由于权限的问题而导致不能访问 /var/log/syslog 文件。我们可以打入如下的命令:

sudo usermod -a -G adm logstash

 然后,我们重新再启动 logstash 服务:

 sudo service logstash restart

这次,我们再次查看,就没有发现上面的错误信息了。

我们回到 Kibana 中进行查看:

GET _cat/indices

我们会发现有一个新的 logstash 的索引出现了。

我们使用如下的命令来进行查看文档:

GET logstash/_search

 我们可以看到:

显然,我们已经成功地把 syslog 导入到 Elasticsearch 中了。

标签:log,Logstash,syslog,我们,Syslog,日志,logstash
来源: https://blog.csdn.net/UbuntuTouch/article/details/122835106

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有