ELFK日志采 - QuickStart

文章目录

架构选型

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?v"

查看节点信息

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)修改配置:

yaml 复制代码
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/crbt/logs/crbtRingSync/wrapper.log
  fields:
    log_source: vrbt-rd1-hbbj
    log_topic: crbt-web-log

output.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常用命令

shell 复制代码
# 启动filebeat
nohup ./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 配置的示例

shell 复制代码
crbt@node2:/home/crbt/lihw/logstash-7.5.1/config>ll
total 40
-rw-r--r-- 1 crbt crbt 2019 Dec 17  2019 jvm.options
-rw-r--r-- 1 crbt crbt 7482 Dec 17  2019 log4j2.properties
-rw-rw-r-- 1 crbt crbt  843 Sep 15 19:07 logstash.conf
-rw-r--r-- 1 crbt crbt  342 Dec 17  2019 logstash-sample.conf
-rw-r--r-- 1 crbt crbt 8372 Sep 15 10:53 logstash.yml
-rw-r--r-- 1 crbt crbt 3146 Dec 17  2019 pipelines.yml
-rw-r--r-- 1 crbt crbt 1696 Dec 17  2019 startup.options
shell 复制代码
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

shell 复制代码
# 启动logstash服务(指定自定义的配置文件logstash.conf)
./logstash -f ../config/logstash.conf

# 后台启动logstash服务🚩
nohup ./logstash -f ../config/logstash.conf &

Input插件

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

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

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

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

    yaml 复制代码
    input {
      kafka {
        bootstrap_servers => "kafka-server:9092"
        topics => ["your-topic"]
      }
    }

Filter插件

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

Grok Filter 插件

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

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

    yaml 复制代码
    rubyCopy code
    mutate {
      add_field => { "new_field" => "New Value" }
    }
  • remove_field:从事件中删除指定字段。

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

    yaml 复制代码
    rubyCopy code
    mutate {
      rename => { "old_field" => "new_field" }
    }
  • copy:复制字段的值到新的字段中。

    yaml 复制代码
    rubyCopy code
    mutate {
      copy => { "source_field" => "destination_field" }
    }
  • replace:替换字段的值为新的值。

    yaml 复制代码
    rubyCopy code
    mutate {
      replace => { "field_to_replace" => "new_value" }
    }
  • update:更新字段的值为新的值,类似于替换操作。

    yaml 复制代码
    rubyCopy code
    mutate {
      update => { "field_to_update" => "new_value" }
    }
  • convert:将字段的数据类型转换为指定的类型。

    yaml 复制代码
    rubyCopy code
    mutate {
      convert => { "numeric_field" => "integer" }
    }
  • gsub:使用正则表达式替换字段中的文本。

    yaml 复制代码
    rubyCopy code
    mutate {
      gsub => [ "field_to_modify", "pattern_to_replace", "replacement_text" ]
    }
  • uppercase/lowercase:将字段值转换为大写或小写。

    yaml 复制代码
    rubyCopy code
    mutate {
      uppercase => [ "field_to_uppercase" ]
      lowercase => [ "field_to_lowercase" ]
    }
  • strip:删除字段值两端的空格。

    yaml 复制代码
    rubyCopy code
    mutate {
      strip => [ "field_to_strip" ]
    }
Mutate Filter配置案例:

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

yaml 复制代码
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" 字段。
yaml 复制代码
#过滤前
{
  "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 集群。

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

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

    yaml 复制代码
    rubyCopy code
    output {
      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 配置文件

yaml 复制代码
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"

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

shell 复制代码
nohup bin/kibana &

nohup ./kibana &

ps aux | grep kibana

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

相关推荐
Karoku0666 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
Karoku0662 天前
【企业级分布式系统】ELK-企业级日志分析系统
运维·数据库·redis·mysql·elk·缓存
一名技术极客2 天前
徒手从零搭建一套ELK日志平台
elk
jun7788955 天前
SpringBoot整合ELK使用详解
spring boot·后端·elk
yueqingll5 天前
023、ELK 从入门到实践
elk
abandondyy5 天前
ELK Elasticsearch 集群部署
大数据·elk·elasticsearch
小李叭叭叭5 天前
ELK8.15.4搭建开启安全认证
运维·elk·elasticsearch·kibana
光仔December12 天前
【Elasticsearch入门到落地】1、初识Elasticsearch
大数据·elk·elasticsearch·搜索引擎·lucene
太空眼睛13 天前
【EFK】Linux集群部署Elasticsearch最新版本8.x
linux·elk·elasticsearch·efk·master·8.15.3·node.roles
Shenqi Lotus17 天前
ELK-ELK基本概念_ElasticSearch的配置
elk·elasticsearch