• Logstash Filebeat 安装配置之使用 Kibana 分析日志数据


    Logstash Filebeat 安装配置之使用 Kibana 分析日志数据

    什么是 Logstash?

    Logstash 是用于管理事件和日志的开源工具。它为数据收集提供实时传递途径。Logstash 将收集你的日志数据,将数据转换为 JSON 文档,并将其存储在 Elasticsearch 中。

    本教程的目地是使用Logstash来收集服务器的syslog,并设置Kibana可视化收集的日志。

    此次我们需要用到的组件:

    Logstash:处理传入日志的的服务器组件
    Elasticsearch:存储所有日志。
    Kibana:用于搜索和可视化日志的Web界面。
    Filebeat:安装在客户端服务器上,利用Filebeat向Logstash搬运日志数据,典型的搬运工。

    以上组件都需要用到,确保Elasticsearch、Kibana已经安装好,如未安装,请参阅以下教程:

    安装配置 Elasticsearch 搜索引擎集群
    ElasticSearch 之 Kibana 二进制安装配置
    Elasticsearch Kibana 集群 安装配置 X-pack 扩展包

    环境:

    Server: CentOS 7 (IP: 10.28.204.65). 16 GB RAM.
    &
    Logstash/Kibana/Elasticsearch

    Client: CentOS 7 (IP: 10.28.204.66). 8 GB RAM.
    &
    Filebeat

    先决条件:

    Linux JAVA JDK JRE 环境变量安装与配置

    由于Logstash基于Java,请确保您的计算机上安装有OpenJDK或Oracle JDK(暂不支持Java 9)。

    安装说明:

    ELK 官网对于每种软件提供了多种格式的安装包(zip/tar/rpm/DEB),以 Linux Centos 7 系统为例,如果直接下载 RPM,可以通过 rpm -ivh path_of_your_rpm_file 直接安装成系统 service。以后就可以使用 systemctl 命令启停。比如 systemctl logstash.service start/stop/status。很简单,但缺点也很明显,不能自定义安装目录,相关文件放置比较分散,不易于集中管理。

    安装 Logstash

    下载地址:https://www.elastic.co/downloads/logstash

    说明:我下面讲述两种安装方式。全程使用超级root用户操作。

    二进制压缩包安装方式

    1.解压并将其移动到合适的路径:

    $ cd /tmp
    $ tar zxvf logstash-5.6.3.tar.gz
    $ mv logstash-5.6.3 /usr/local
    $ cd /usr/local
    $ ln -s logstash-5.6.3 logstash
    $ mkdir -p /usr/local/logstash/config/conf.d

    2.创建用户和组并赋予权限

    $ groupadd logstash
    $ useradd -g logstash logstash
    $ chown -R logstash.logstash logstash*

    3.创建systemctl系统单元文件

    $ vim /etc/systemd/system/logstash.service
    
    [Unit]
    Description=logstash
    
    [Service]
    Type=simple
    User=logstash
    Group=logstash
    # Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
    # Prefixing the path with '-' makes it try to load, but if the file doesn't
    # exist, it continues onward.
    EnvironmentFile=-/usr/local/logstash/config
    EnvironmentFile=-/usr/local/logstash/config
    ExecStart=/usr/local/logstash/bin/logstash "--path.settings" "/usr/local/logstash/config"
    Restart=always
    WorkingDirectory=/
    Nice=19
    LimitNOFILE=16384
    
    [Install]
    WantedBy=multi-user.target

    安装完成。此种安装方法优势在于配置文件集中,易管理,但安装比较麻烦。

    YUM 安装方式

    此种安装方式简单快速,耗时较短。

    1.下载并安装公共签名密钥:

    $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

    如果下载失败,请将服务器DNS修改为 8.8.8.8 重启网卡即可。

    2.添加logstash镜像源

    $ vim /etc/yum.repos.d/logstash.repo
    
    [logstash-5.x]
    name=Elastic repository for 5.x packages
    baseurl=https://artifacts.elastic.co/packages/5.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md

    3.开始安装

    $ yum install logstash -y

    安装完后会自动生成logstash.service单元文件,无需手动创建。

    说明:5.x 代表:默认安装最新版的logstash,可根据需求把 x 更改为具体版本号,例如:5.6。

    YUM安装后的相关配置目录:

    /usr/share/logstash - 主程序
    /etc/logstash - 配置文件
    /var/log/logstash - 日志
    /var/lib/logstash - 数据存储

    开始配置 Logstash

    注意:以下操作,我使用第一种安装方式配置。

    Filebeat(Logstash Forwarder)通常安装在客户端服务器上,并使用SSL证书验证Logstash服务器的身份以进行安全通信。

    1.生成有效期为365天的自签名SSL证书,使用主机名或IP SAN创建SSL证书。

    方法一(主机名):

    $ cd /etc/pki/tls/

    现在创建SSL证书。将“server.renwolecom.local” 替换为你的logstash服务器主机名。

    $ openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout private / logstash-forwarder.key -out certs / logstash-forwarder.crt -subj / CN = server.renwolecom.local

    2.如果你计划使用IP地址而不是主机名,请按照以下步骤为IP SAN创建SSL证书。

    方法二(IP地址):

    要创建IP SAN证书,你需要在OpenSSL配置文件中的SubjectAltName中添加一个logstash服务器的IP地址。

    $ vim /etc/pki/tls/openssl.cnf

    查找 “[v3_ca]” 部分,在此字段下方添加logstash服务器的IP,例如:

    subjectAltName = IP:10.28.204.65
    
    $ cd /etc/pki/tls/
    $ openssl req -x509 -days 365 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

    本文采用后者。

    配置 logstash.conf

    Logstash配置可以在/etc/logstash(YUN安装方式)中找到。由于我是二进制安装,所以需要在 /usr/local/logstash/config 目录下创建conf.d文件夹(已创建)。

    logstash配置文件由三部分组成,分别是:输入、过滤、输出; 你可以在 /usr/local/logstash/config/conf.d 下分别创建三个配置文件,也可以将这三个部分放在一个配置文件中。

    1.我建议你使用单个文件并放置输入、过滤、输出部分。

    $ vim /usr/local/logstash/config/conf.d/logstash.conf

    2.在输入部分,我将配置Logstash通信端口以及添加SSL证书,从而进行安全通信。

    input {
     beats {
       port => 5044
       ssl => true
       ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
       ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
      }
    }

    3.在过滤器部分,我们将使用Grok来解析这些日志,然后将其发送到Elasticsearch。以下grok过滤器将查找“syslog”标记的日志,并尝试解析它们,以生成结构化索引。

    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}" ]
        }
        syslog_pri { }
        date {
          match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
        }
      }
    }

    4.在输出部分,我们将定义要存储的日志位置; 这个很显然是Elasticsearch服务器。

    output {
     elasticsearch {
      hosts => [ "10.28.204.65:9200" ]
        index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
     user => elastic
     password => changeme
           }
    stdout {
        codec => rubydebug
           }
    }

    5.完整配置内容如下:

    $ cat /usr/local/logstash/config/conf.d/logstash.conf
    
    input {
     beats {
       port => 5044
       ssl => true
       ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
       ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
      }
    }
    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}" ]
        }
        syslog_pri { }
        date {
          match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
        }
      }
    }
    output {
     elasticsearch {
      hosts => [ "10.28.204.65:9200" ]
        index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
     user => elastic
     password => changeme
           }
    stdout {
        codec => rubydebug
           }
    }

    修改 logstash.yml 主配置文件

    修改完成后的内容如下:

    $ egrep -v "(^#|^$)" /usr/local/logstash/config/logstash.yml
    
    path.config: /usr/local/logstash/config/conf.d
    path.logs: /usr/local/logstash/logs

    主要是上面路径。

    启动 logstash 并加入开机自启

    $ systemctl start logstash
    $ systemctl enable logstash

    启动后你可以通过如下命令查看日志状态,从而解决任何可能出现的问题。

    YUM安装查看日志:

    $ cat /var/log/logstash/logstash-plain.log

    二进制安装查看日志:

    $ cat /usr/local/logstash/logs/logstash-plain.log

    请根据自己的实际路径查看操作。

    在客户端服务器上安装 Filebeat

    1.有5个Beats客户端可用,分别是:

    Filebeat – 实时洞察日志数据。
    Packetbeat – 分析网络数据包数据。
    Metricbeat – 采集服务的各项性能指标。
    Winlogbeat – 轻量级的Windows事件日志。
    Heartbeat – 主动探测来监控其可用性的服务。

    2.要分析客户端计算机的系统日志(例如:10.28.204.66),我们需要安装filebeat。使用以下命令进行安装:

    $ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.3-x86_64.rpm
    $ rpm -vi filebeat-5.6.3-x86_64.rpm

    配置 Filebeat

    现在是时候将filebeat与Logstash连接起来,按照下面的步骤来获得配置ELK Stack的filebeat。

    1.Filebeat(beats)使用SSL证书验证logstash服务器身份,因此将logstash-forwarder.crt从logstash服务器复制到客户端。

    $ scp -pr root@10.28.204.65:/etc/pki/tls/certs/logstash-forwarder.crt /etc/ssl/certs/

    2.打开filebeat配置文件

    $ vim /etc/filebeat/filebeat.yml

    3.我们将配置filebeat来发送 /var/log/messages 日志内容到Logstash服务器。因此请在路径部分下修改现有的配置。请注释掉– /var/log/*.log,以避免将该目录中所有.log文件发送到Logstash。

    ...
    paths:
    
    - /var/log/messages
    # - /var/log/*.log
    ...

    4.注释掉“output.elasticsearch”部分。因为我们不会直接将日志存储到Elasticsearch

    ...
    #output.elasticsearch:
    ...

    5.现在,找到 “output.logstash” 行。并修改如下所示的内容:

    本节定义filebeat将日志发送到logstash服务器“10.28.204.65:5044”。并修改SSL证书所在的路径。

    ...
    output.logstash:
      # The Logstash hosts
      #hosts: ["localhost:5044"]
      hosts: ["103.28.204.65:5044"]
    
      # Optional SSL. By default is off.
      # List of root certificates for HTTPS server verifications
      ssl.certificate_authorities: ["/etc/ssl/certs/logstash-forwarder.crt"]
    ...

    保存并退出。
    重要:Filebeat的配置文件采用YAML格式,这意味着缩进非常重要!请务必使用与这些说明相同数量的空格。

    重新启动 Filebeat 服务

    $ systemctl restart filebeat
    $ cat /var/log/filebeat/filebeat

    Firewall 防火墙设置

    $ firewall-cmd --permanent --zone=public --add-port=5044/tcp
    $ firewall-cmd --reload

    测试数据是否正常存储

    在你的 Elasticsearch 服务器上,通过使用以下命令,验证 Elasticsearch 是否接收到 Filebeat>logstash 数据:

    $ curl -u elastic -XGET 'http://10.28.204.65:9200/filebeat-*/_search?pretty'

    回车后输入你的认证密码,你应该看到一堆如下的输出:

    ...
    {
    "_index" : "filebeat-2017.11.1",
    "_type" : "log",
    "_id" : "AV8Zh29HaTuC0RmgtzyM",
    "_score" : 1.0,
    "_source" : {
    "@timestamp" : "2017-11-1T06:16:34.719Z",
    "offset" : 39467692,
    "@version" : "1",
    "beat" : {
    "name" : "204",
    "hostname" : "204",
    "version" : "5.6.3"
    },
    "input_type" : "log",
    "host" : "204",
    "source" : "/var/log/messages",
    "message" : "Nov 11 19:06:37 204 logstash: at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:182)",
    "type" : "log",
    "tags" : [
    "beats_input_codec_plain_applied"
    ]
    }
    ...

    如果你的输出显示为 0,那么你应该排查logstash与Elasticsearch的通信是否正常,通过可以通过查看启动日志得出结论。如果你获得了预期的输出,则进行下一步。

    连接到 Kibana

    1.使用以下URL访问Kibana:

    http://10.28.204.65:5601/

    2.在你的第一次登录时,你必须映射filebeat索引。

    在索引名称或模式框中键入以下内容:

    filebeat-*

    选择 @timestamp 然后单击创建。

    3.还可以登录 logstash
    依次打开:

    Management >> Index Patterns >> Create Index Pattern

    输入:

    filebeat-*

    选择:

    @timestamp

    其他默认,点击:Create 。

    4.创建完成后点击:

    Discover >> filebeat-*

    此时你可以在右侧查看客户端 10.28.204.66 的系统日志。

    ELK Stack Logstash 的安装配置与结合使用到目前为止已经完成,Kibana不仅仅局限于此,他还有更强大的功能,值得深入研究。

  • 相关阅读:
    JavaScript实现网页换肤
    JavaScript实现鼠标效果
    JavaScript实现复选框的全选、不选、反选
    处理器解决物联网和人工智能的融合
    用小神经网络和光谱仪优化关键词识别
    电阻存储器为edge-AI提供了仿生架构
    为什么edge AI是一个无需大脑的人
    满足实时人工智能的计算需求
    传感器可以让智能手机测量生命体征
    接触追踪解决方案建立在UWB而不是蓝牙上
  • 原文地址:https://www.cnblogs.com/zafu/p/12142159.html
Copyright © 2020-2023  润新知