更新时间:2023-06-20 GMT+08:00

使用CSS搭建统一日志管理平台

使用CSS搭建的统一日志管理平台可以实时地、统一地、方便地管理日志,让日志驱动运维、运营等,提升服务管理效率。

方案架构

ELKB(Elasticsearch、Logstash、Kibana、Beats)提供了一整套日志场景解决方案,是目前主流的一种日志系统。其框架如图所示。

图1 统一日志管理平台框架
  • Beats是一个轻量级日志采集器,包括Filebeat、Metricbeat等。
  • Logstash用于对日志进行搜集与预处理,支持多种数据源与ETL处理方式。
  • Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据等主要功能,CSS云搜索服务可以创建Elasticsearch集群。
  • Kibana是一个可视化工具,可以基于Kibana进行Web可视化查询,并制作BI报表。

本章以CSS、Filebeat、Logstash和Kibana为例,搭建一个统一日志管理平台。使用Filebeat采集ECS中的日志,发送到Logstash进行数据处理,再存储到CSS中,最后通过Kibana进行日志的可视化查询与分析。

ELKB系统中各组件的版本兼容性请参见 https://www.elastic.co/support/matrix#matrix_compatibility

前提条件

  • 已创建好非安全模式的CSS集群。
  • 已申请了ECS虚拟机,并安装了Java环境。

操作步骤

  1. 部署并配置Filebeat。

    1. 下载Filebeat,版本建议选择7.6.2。下载地址:https://www.elastic.co/downloads/past-releases#filebeat-oss
    2. 配置Filebeat的配置文件“filebeat.yml”
      例如,采集“/root/”目录下以“log”结尾的所有文件,配置文件“filebeat.yml”中的内容如下:
      filebeat.inputs:
      - type: log
        enabled: true
        # 采集的日志文件路径。
        paths:
          - /root/*.log
      
      filebeat.config.modules:
        path: ${path.config}/modules.d/*.yml
        reload.enabled: false
      # Logstash的hosts信息
      output.logstash:
        hosts: ["192.168.0.126:5044"]
      
      processors:

  2. 部署并配置Logstash。

    为了获得更优的性能,Logstash中的JVM参数建议配置为ECS/docker中内存的一半。

    1. 下载Logstash,版本建议选择7.6.2。下载地址:https://www.elastic.co/downloads/past-releases#logstash-oss
    2. 确保Logstash与CSS集群的网络互通。
    3. 配置Logstash的配置文件“logstash-sample.conf”。中的内容如下:

      配置文件“logstash-sample.conf”中的内容如下:

      input {
        beats {
          port => 5044
        }
      }
      # 对数据的切割与截取信息,
      filter {
          grok {
              match => {
                  "message" => '\[%{GREEDYDATA:timemaybe}\] \[%{WORD:level}\] %{GREEDYDATA:content}'
              }
          }
          mutate {
            remove_field => ["@version","tags","source","input","prospector","beat"]
          }
      }
      # CSS集群的信息
      output {
        elasticsearch {
          hosts => ["http://192.168.0.4:9200"]
          index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
          #user => "xxx"
          #password => "xxx"
        }
      }

      Logstash的“filter”进行模式配置时,可以借助Grok Debugger(http://grokdebug.herokuapp.com/)。

  3. 在Kibana上或通过API配置CSS集群的索引模板。

    例如,创建一个索引模板,配置索引默认采用3分片、0副本,索引中定义了@timestamp、content、host.name、level、log.file.path、message、timemaybe等字段。

    PUT _template/filebeat
    {
      "index_patterns": ["filebeat*"],
      "settings": {
        # 定义分片数。
        "number_of_shards": 3,
        # 定义副本数。
        "number_of_replicas": 0,
        "refresh_interval": "5s"
      },
      # 定义字段。
      "mappings": {
            "properties": {
              "@timestamp": {
                "type": "date"
              },
              "content": {
                "type": "text"
              },
              "host": {
                "properties": {
                  "name": {
                    "type": "text"
                  }
                }
              },
              "level": {
                "type": "keyword"
              },
              "log": {
                "properties": {
                  "file": {
                    "properties": {
                      "path": {
                        "type": "text"
                      }
                    }
                  }
                }
              },
              "message": {
                "type": "text"
              },
              "timemaybe": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
              }
            }
        }
    }

  4. 在ECS上准备测试数据。

    执行如下命令,生成测试数据,并将数据写到“/root/tmp.log”中:

    bash -c 'while true; do echo [$(date)] [info] this is the test message; sleep 1; done;' >> /root/tmp.log &

    生成的测试数据样例如下:

    [Thu Feb 13 14:01:16 CST 2020] [info] this is the test message

  5. 执行如下命令,启动Logstash。

    nohup ./bin/logstash -f /opt/pht/logstash-6.8.6/logstash-sample.conf &

  6. 执行如下命令,启动Filebeat。

    ./filebeat

  7. 通过Kibana进行查询并制作报表。

    1. 进入CSS集群的Kibana页面。
    2. 选择“Discover”进行查询与分析,类似的效果如下:
      图2 Discover界面示例