文章目录

    • 架构选型
      • ELK
      • EFLK
    • Elasticsearch
      • ES集群搭建
      • 常用命令
    • Filebeat
      • 功能介绍
      • 安装步骤
      • Filebeat配置详解
      • filebeat常用命令
    • Logstash
      • 功能介绍
      • 安装步骤
      • Input插件
      • Filter插件
        • Grok Filter 插件
        • Mutate Filter 插件
          • 常见的插件配置选项:
          • Mutate Filter配置案例:
      • Output插件
    • Kibana
      • 功能介绍
      • 安装步骤

架构选型

ELK

“ELK” 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。

  • Elasticsearch 是一个搜索和分析引擎。
  • Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到Elasticsearch、kafka等。
  • Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

一套日志采集系统需要具备以下5个功能:

  • 收集 :能够采集多个来源的日志数据。
  • 传输 :能够稳定的把日志数据传输到日志服务。
  • 存储 :能够存储海量的日志数据。
  • 查询 :能够灵活且高效的查询日志数据,并提供一定的分析能力。
  • 告警 :能够提供提供告警功能,通知开发和运维等等

Elastic官网:https://www.elastic.co/cn/what-is/elk-stack

EFLK

在采集日志数据时,我们需要在服务器上安装一个 Logstash。不过 Logstash 是基于 JVM 的重量级的采集器,对系统的 CPU、内存、IO 等等资源占用非常高,这样可能影响服务器上的其它服务的运行。所以,Elastic NV 推出 Beats ,基于 Go 的轻量级采集器,对系统的 CPU、内存、IO 等等资源的占用基本可以忽略不计。因此,本文的示例就变成了 ELFK 。其中,Beats 负责采集数据,并通过网路传输给 Logstash。即整体架构:

Beats 是一个全品类采集器的系列,包含多个:(使用 Filebeat,采集日志文件)

  • Filebeat :轻量型日志采集器。√
  • Metricbeat :轻量型指标采集器。
  • Packetbeat :轻量型网络数据采集器。
  • Winlogbeat :轻量型 Windows 事件日志采集器。
  • Auditbeat :轻量型审计日志采集器。
  • Heartbeat :面向运行状态监测的轻量型采集器。
  • Functionbeat :面向云端数据的无服务器采集器。

Elasticsearch

ES集群搭建

参考:Elasticsearch7.x – 集群部署 – lihewei – 博客园 (cnblogs.com)

常用命令

启动 Elasticsearch 服务

# 使用命令行启动 Elasticsearch 服务elasticsearch# 或者使用 systemd(根据您的操作系统)sudo systemctl start elasticsearch

停止 Elasticsearch 服务

# 使用命令行停止 Elasticsearch 服务Ctrl+C# 或者使用 systemd(根据您的操作系统)sudo systemctl stop elasticsearch

检查 Elasticsearch 集群健康状态

# 使用 curl 命令检查集群健康状态curl -X GET "http://localhost:9200/_cat/health" />

查看节点信息

shellCopy code# 使用 curl 命令查看节点信息curl -X GET "http://localhost:9200/_cat/nodes?v"

创建索引

# 使用 curl 命令创建一个名为 "my_index" 的索引curl -X PUT "http://localhost:9200/my_index"

删除索引

# 使用 curl 命令删除名为 "my_index" 的索引curl -X DELETE "http://localhost:9200/my_index"

索引文档

# 使用 curl 命令索引一篇文档到 "my_index" 索引中curl -X POST "http://localhost:9200/my_index/_doc" -d '{"field1": "value1","field2": "value2"}'

搜索文档

# 使用 curl 命令执行搜索查询curl -X GET "http://localhost:9200/my_index/_search?q=field1:value1"

查看索引的映射(Mapping)

# 使用 curl 命令查看索引 "my_index" 的映射curl -X GET "http://localhost:9200/my_index/_mapping"

查看索引的统计信息

# 使用 curl 命令查看索引 "my_index" 的统计信息curl -X GET "http://localhost:9200/my_index/_stats"

查看索引中的文档数量

# 使用 curl 命令查看索引 "my_index" 中的文档数量curl -X GET "http://localhost:9200/my_index/_count"

聚合数据

# 使用 curl 命令执行聚合操作curl -X POST "http://localhost:9200/my_index/_search" -d '{"size": 0,"aggs": {"avg_field2": {"avg": {"field": "field2"}}}}'

更新文档

# 使用 curl 命令更新文档curl -X POST "http://localhost:9200/my_index/_update/1" -d '{"doc": {"field1": "new_value"}}'

删除文档

# 使用 curl 命令删除文档curl -X DELETE "http://localhost:9200/my_index/_doc/1"

Filebeat

功能介绍

Filebeat是一个轻量型日志采集器,负责采集数据,并通过网路传输给 Logstash。

安装步骤

1)官网下载:https://www.elastic.co/cn/downloads/beats/filebeat

2)解压:tar -zxvf filebeat-7.5.1-darwin-x86_64.tar.gz

3)修改配置:

filebeat.inputs:- type: logenabled: truepaths:- /home/crbt/logs/crbtRingSync/wrapper.logfields:log_source: vrbt-rd1-hbbjlog_topic: crbt-web-logoutput.kafka:hosts: ["10.1.61.121:9092"]topic: '%{[fields.log_topic]}'

Filebeat配置详解

  • filebeat.inputs 配置项,设置 Filebeat 读取的日志来源。该配置项是数组类型,可以将 Nginx、MySQL、Spring Boot 每一类,作为数组中的一个元素。
  • output.elasticsearch 配置项,设置 Filebeat 直接写入数据到 Elasticsearch 中。虽然说 Filebeat 5.0 版本以来,也提供了 Filter 功能,但是相比 Logstash 提供的 Filter 会弱一些。所以在一般情况下,Filebeat 并不直接写入到 Elasticsearch 中
  • output.logstash 配置项,设置 Filebeat 写入数据到 Logstash 中
  • output.kafka配置项,设置Filebeat 写入数据到 kafka 中

filebeat常用命令

# 启动filebeatnohup ./filebeat -e &# -e 参数表示以前台模式运行-c 指定配置文件./filebeat -e -c /home/crbt/lihewei/filebeat-7.5.1-linux-x86_64/filebeat.yml./filebeat -e -c filebeat.yml# 查看filebeat是否正常启动curl http://localhost:5066/ps -ef | grep filebeat

Logstash

功能介绍

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到喜欢的“存储库”中。通过定义了一个 Logstash 管道(Logstash Pipeline),来读取、过滤、输出数据。一个 Logstash Pipeline 包含三部分:

  • 【必选】输入(Input): 数据(包含但不限于日志)往往都是以不同的形式、格式存储在不同的系统中,而 Logstash 支持从多种数据源中收集数据(File、Syslog、MySQL、消息中间件等等)
  • 【可选】过滤器(Filter) :实时解析和转换数据,识别已命名的字段以构建结构,并将它们转换成通用格式。
  • 【必选】输出(Output) :Elasticsearch 并非存储的唯一选择,Logstash 提供很多输出选择。

安装步骤

1)下载: https://www.elastic.co/cn/products/logstash

2)解压:unzip logstash-7.5.1.zip

3)修改配置文件

config 目录下,提供了 Logstash 的配置文件,其中,logstash-sample.conf 配置文件,是 Logstash 提供的 Pipeline 配置的示例

crbt@node2:/home/crbt/lihw/logstash-7.5.1/config>lltotal 40-rw-r--r-- 1 crbt crbt 2019 Dec 172019 jvm.options-rw-r--r-- 1 crbt crbt 7482 Dec 172019 log4j2.properties-rw-rw-r-- 1 crbt crbt843 Sep 15 19:07 logstash.conf-rw-r--r-- 1 crbt crbt342 Dec 172019 logstash-sample.conf-rw-r--r-- 1 crbt crbt 8372 Sep 15 10:53 logstash.yml-rw-r--r-- 1 crbt crbt 3146 Dec 172019 pipelines.yml-rw-r--r-- 1 crbt crbt 1696 Dec 172019 startup.options
crbt@node2:/home/crbt/lihw/logstash-7.5.1/config>cat logstash-sample.conf# Sample Logstash configuration for creating a simple# Beats -> Logstash -> Elasticsearch pipeline.#日志消息从哪里来(这里使用filebeat进行日志收集)input {beats {port => 5044}}#日志信息输出到哪里去(这里写入es数据库)output {elasticsearch {hosts => ["http://10.1.61.121:9200"]index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"}}

4)指定配置文件并启动logstash:W

# 启动logstash服务(指定自定义的配置文件logstash.conf)./logstash -f ../config/logstash.conf# 后台启动logstash服务nohup ./logstash -f ../config/logstash.conf &

Input插件

Logstash 的 input 插件用于从不同的数据源中接收数据,并将其发送到 Logstash 事件流中供进一步处理。每个 input 插件都有其特定的配置选项,以适应不同类型的数据源,修改自定义的配置文件即可生效(下面仅列举了几个常用输入方法)

  • File Input 插件:用于从本地文件读取数据。

    input {file {path => "/path/to/your/logfile.log"start_position => "beginning"sincedb_path => "/dev/null"}}
  • Beats Input 插件:用于接收来自 Elastic Beats 系列工具(如 Filebeat、Metricbeat)的数据。

    input {beats {port => 5044}}
  • Kafka Input 插件:用于从 Apache Kafka 主题中消费数据。

    input {kafka {bootstrap_servers => "kafka-server:9092"topics => ["your-topic"]}}

Filter插件

Logstash 的 filter 插件用于对接收的事件进行处理、转换和丰富,以便更好地进行索引和分析。每个 filter 插件都有其特定的配置选项,以适应不同的数据处理需求。以下是一些常见的 Logstash filter 插件及其配置示例:

Grok Filter 插件

Logstash 的 Grok Filter 插件用于从非结构化的文本数据中提取结构化的字段。

filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}" }}}
Mutate Filter 插件
常见的插件配置选项:
  • add_field:添加新字段到事件中,并指定字段的名称和值。

    rubyCopy codemutate {add_field => { "new_field" => "New Value" }}
  • remove_field:从事件中删除指定字段。

    rubyCopy codemutate {remove_field => [ "field1", "field2" ]}
  • rename:重命名事件中的字段,将字段从旧名称改为新名称。

    rubyCopy codemutate {rename => { "old_field" => "new_field" }}
  • copy:复制字段的值到新的字段中。

    rubyCopy codemutate {copy => { "source_field" => "destination_field" }}
  • replace:替换字段的值为新的值。

    rubyCopy codemutate {replace => { "field_to_replace" => "new_value" }}
  • update:更新字段的值为新的值,类似于替换操作。

    rubyCopy codemutate {update => { "field_to_update" => "new_value" }}
  • convert:将字段的数据类型转换为指定的类型。

    rubyCopy codemutate {convert => { "numeric_field" => "integer" }}
  • gsub:使用正则表达式替换字段中的文本。

    rubyCopy codemutate {gsub => [ "field_to_modify", "pattern_to_replace", "replacement_text" ]}
  • uppercase/lowercase:将字段值转换为大写或小写。

    rubyCopy codemutate {uppercase => [ "field_to_uppercase" ]lowercase => [ "field_to_lowercase" ]}
  • strip:删除字段值两端的空格。

    rubyCopy codemutate {strip => [ "field_to_strip" ]}
Mutate Filter配置案例:

用于对字段进行修改、重命名和删除。

filter {mutate {add_field => { "new_field" => "New Value" }rename => { "user" => "username" }remove_field => [ "message" ]}}

在上面的配置中,我们使用 Mutate Filter 插件执行了以下操作:

  • add_field:我们添加了一个名为 “new_field” 的新字段,并将其值设置为 “New Value”。此时事件将变为:
  • rename:我们重命名了 “user” 字段为 “username”。此时事件将变为:
  • remove_field:我们删除了 “message” 字段。此时事件将不再包含 “message” 字段。
#过滤前{"message": "Log entry","user": "john_doe","status": "success","response_time_ms": 45}#过滤后{"username": "john_doe","status": "success","response_time_ms": 45,"new_field": "New Value"}

Output插件

Logstash 的 output 插件用于将处理过的事件发送到各种目标,如 Elasticsearch、文件、数据库等。每个 output 插件都有其特定的配置选项,以适应不同的目标和需求。以下是一些常见的 Logstash output 插件及其配置示例:

  • Elasticsearch Output 插件:用于将事件发送到 Elasticsearch 集群。

    output {elasticsearch {hosts => ["http://localhost:9200"]index => "my_index"}}
  • File Output 插件:用于将事件写入本地文件。

    output {file {path => "/path/to/output/file.txt"}}
  • Kafka Output 插件:用于将事件发送到 Apache Kafka 主题。

    rubyCopy codeoutput {kafka {topic_id => "my_topic"bootstrap_servers => "kafka-server:9092"}}

Kibana

功能介绍

通过 Kibana,您可以对自己的 Elasticsearch 进行可视化,也可以通过插件的方式查看es

安装步骤

1)官网下载:https://www.elastic.co/cn/products/kibana

2)解压 tar -zxvf kibana-7.5.1-darwin-x86_64.tar.gz

3)修改配置,vi config/kibana.yml 命令,编辑 Kibana 配置文件

server.port: 5601server.host: "0.0.0.0"elasticsearch.hosts: ["http://localhost:9200"]kibana.index: ".kibana"

4)启动Kibana:nohup bin/kibana & 命令,后台启动 Kibana 服务。

nohup bin/kibana &nohup ./kibana &ps aux | grep kibana

5)测试:访问 http://10.1.61.122:5601/ 地址,查看 Kibana 是否启动成功