ELFK日志采 - QuickStart

文章目录

    • 架构选型
      • 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?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)修改配置:

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

# 启动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 配置的示例

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
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 code
    mutate {add_field => { "new_field" => "New Value" }
    }
    
  • remove_field:从事件中删除指定字段。

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

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

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

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

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

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

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

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

    rubyCopy code
    mutate {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 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 配置文件

server.port: 5601
server.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 是否启动成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456792.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 2.2 中文官方教程(十八)

开始使用完全分片数据并行(FSDP) 原文:pytorch.org/tutorials/intermediate/FSDP_tutorial.html 译者:飞龙 协议:CC BY-NC-SA 4.0 作者:Hamid Shojanazeri,Yanli Zhao,Shen Li 注意…

测试开发体系

软件测试 通过手工或者工具对 “被测对象”进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷,从而提高用户对产品的使用信心测试可以降低同类型产品开发遇到问题的风险 软件缺陷 软件缺陷被测试工程…

【Go语言成长之路】引入外部包

文章目录 引入外部包一、查找需要引用的包二、引入需要导入的包三、运行程序 引入外部包 ​ 实现Demo: 引用rsc.io/quote包来实现打印输出 一、查找需要引用的包 ​ 比如说我现在想要找一个quote的包,那么可以通过如下步骤进行操作: 访问pkg.go.dev,并…

Netty源码系列 之 EventLoop run()方法 源码

EventLoop[实现类为NioEventLoop,我们研究NioEventLoop即可] EventLoop是一个单线程的线程池 核心作用:处理执行IO操作(accept,read,write事件),普通任务,定时任务 EventLoop封装…

Day 3. Linux高级编程之函数接口和流的定位

gets和fgets区别: 1)gets没有给定最多读取字符的个数,有越界风险\n\n fgets需要给定最多读取的字符个数,没有越界的风险\n\n 2)gets会去掉从终端接收的/n,换成/0\n\n fgets则会保留并在末尾加上/0\…

力扣热门100题 - 5.最长回文子串

力扣热门100题 - 5.最长回文子串 题目描述:示例:提示:解题思路:(动态规划)代码: 题目链接:5. 最长回文子串 题目描述: 给你一个字符串 s,找到 s 中最长的回…

补题:leetcode第382场周赛 3022. 给定操作次数内使剩余元素的或值最小

3022. 给定操作次数内使剩余元素的或值最小 - 力扣(LeetCode) 拆位 n个数进行或运算的结果最小,每次操作可以对相邻的两个数进行与运算,至多进行k次操作 n个数进行或运算,可以对每个数进行拆解,拆解成最小…

vue3 mathjax 数学公式

安装 pnpm install mathjax 新建文件/util/mathjax.js window.MathJax {tex: {inlineMath: [["$", "$"],["\\(", "\\)"],], // 行内公式选择符displayMath: [["$$", "$$"],["\\[", "\\]"…

Linux的进程信号

注意:首先需要提醒一个事情,本节提及的进程信号和下节的信号量没有任何关系,请您区分对待。 1.信号概念 1.1.生活中的信号 我们在生活中通过体验现实,记忆了一些信号和对应的处理动作,这意味着信号有以下相关的特点&…

idea开发工具的简单使用与常见问题

1、配置git 选择左上角目录file->setting 打开,Version Control 目录下Git,选择git安装目录下的git.exe文件; 点击test,出现git版本,则表示git识别成功,点击右下角确认即可生效。 2、配置node.js 选…

nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析(中)

目录 6. 源码分析6.1 解析指令分析6.2 待检查的服务器的添加和状态查询6.3 本模块的进程初始化函数6.4 准备执行健康检测任务6.5 执行健康检测任务本篇对ngx_http_upstream_check_module的源码实现进行详细分析。 关于配置和使用部分可以查看上篇:nginx upstream server主动健…

table列折行

这里折叠后少了合同名称,风险进展,预判无法达成金额 通过按钮的状态,来控制某一列的显示与隐藏, <el-tablev-loading"loading"v-if"tableStatus"border:data"tableData":key"tableKey"id"table"class"table-self is…