美文网首页自动化
通过 Filebeat 收集 ubuntu 系统日志

通过 Filebeat 收集 ubuntu 系统日志

作者: 51reboot | 来源:发表于2019-07-04 16:13 被阅读10次

    需求:收集 ubuntu 系统日志,发送给 logstash,再由 logstash 把数据传递给 elasticsearch,最后通过 kibana 展示日志数据。

    Filebeat System Module

    Filebeat Modules 可以简化常见日志格式的收集、解析和可视化。一个典型的模块(例如,对于 Nginx 日志)由一个或多个日志文件(fileset)组成(对于 Nginx 来说,默认是 access.log 和 error.log)。这里我们可以使用 Filebeat 的 System Module 完成 ubuntu 的系统日志。

    下面介绍配置 System Module 的步骤(假如你已经安装好了 Filebeat)。

    启用 System Module

    Filebeat 支持的模块默认都是未启用的,我们可以通过下面的方式启用模块。找到 filebeat 程序,执行 moudles enable 命令:

    $ sudo ./filebeat modules enable system
    

    上面的命令启用了 system 模块,用下面的命令可以查看当前已经启用的模块有哪些:

    $ sudo ./filebeat modules list
    
    image

    把数据发送给 logstash

    配置 Filebeat 将日志行发送到 Logstash。要做到这一点,在配置文件 filebeat.yml 中禁用 Elasticsearch 输出,并启用 Logstash 输出:

    #output.elasticsearch:
      #hosts: ["xxx.xxx.xxx.xxx:9200"]
    output.logstash:
      hosts: ["xxx.xxx.xxx.xxx:5044"]
    

    重启 filebeat 服务

    $ sudo systemctl restart filebeat.service
    

    配置 Logstash 处理数据

    要让 logstash 接受 Filebeat System Module 发送来的数据还是有些难度的,至少我们需要一个看上去有点复杂的配置:

    input {
      beats {
        port => 5064
        host => "0.0.0.0"
      }
    }
    filter {
      if [fileset][module] == "system" {
        if [fileset][name] == "auth" {
          grok {
            match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                      "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                      "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                      "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                      "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                      "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                      "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
            pattern_definitions => {
              "GREEDYMULTILINE"=> "(.|\n)*"
            }
            remove_field => "message"
          }
          date {
            match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
          }
          geoip {
            source => "[system][auth][ssh][ip]"
            target => "[system][auth][ssh][geoip]"
          }
        }
        else if [fileset][name] == "syslog" {
          grok {
            match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
            pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
            remove_field => "message"
          }
          date {
            match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
          }
        }
      }
    }
    output {
      elasticsearch {
        hosts => xxx.xxx.xxx.xxx
        manage_template => false
        index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
      }
    }
    

    处理时区问题

    看到这段配置我多么希望它能够直接工作啊!不幸的是它并不能很好的工作,至少在我的 ubuntu 18.04 上不行。问题的核心是无论 auth.log 还是 syslog,记录的都是本地时区的区时:


    image

    而上面的配置中把这些时间都当成 UTC 时间来处理了。搞清楚了原因,纠正起来就很容易了,在 date 插件中添加本地的时区信息就可以了。比如笔者所在时区为东八区,那么就分别在两个 date 的配置中添加下面的信息:

    timezone => "Asia/Chongqing"
    

    让独立的 pipeline 处理该数据流
    下面创建一个新的目录 /etc/logstash/myconf.d,并在 /etc/logstash/myconf.d 目录下创建 Logstash 配置文件 krtest.conf。然后在 /etc/logstash/pipelines.yml 文件中添加新的 pipeline 配置:

    • pipeline.id: main
      path.config: "/etc/logstash/conf.d/*.conf"
      - pipeline.id: krtest
      path.config: "/etc/logstash/myconf.d/krtest.conf"

    其中 pipeline.id 为 main 的管道是默认的配置,我们新添加了 id 为 krtest 的管道并指定了对应的配置文件路径。把上面的配置写入到 /etc/logstash/myconf.d/krtest.conf 文件中。然后重启 logstash 服务:

    $ sudo systemctl restart logstash.service
    

    在 Kibana 中查看日志

    最后在 kibana 中添加 filebeat 开头的 index pattern,就可以通过图形界面查看 ubuntu 的系统日志了:


    image

    参考:

    Filebeat Modules
    System module
    Working with Filebeat Modules

    作者:sparkdev
    出处:http://www.cnblogs.com/sparkdev/

    《如何在60分钟掌握Go基础及加解密知识》

    Jenkins和K8s实战分享

    时间:7月4日21:00-22:00

    大纲
    一、Jenkins 管理
    1、Jenkins 安装
    2、插件管理
    3、用户权限管理
    4、邮件通知
    5、域名解析 + Nginx 代理
    6、WebHook 配置
    7、Jenkins API

    二、Jenkins Pipeline 流水线
    特性、语法、流程控制

    三、CICD+K8S 最佳实战

    嘉宾: pig
    视觉中国运维工程师,6年Linux运维工作经验,拥有丰富的系统服务搭建、维护、自动化运维的实战经验,擅长CICD和容器管理,喜欢技术钻研和分享。

    获取链接找它WeChat:17812796384

    相关文章

      网友评论

        本文标题:通过 Filebeat 收集 ubuntu 系统日志

        本文链接:https://www.haomeiwen.com/subject/yyerhctx.html