ELK——日志处理界的瑞士军刀

目录

引言

一、ELK简介

(一)基本概述

1.Elasticsearch服务

2.Logstash服务

[2.2 logstash关键组件](#2.2 logstash关键组件)

[2.2 logstash数据流向](#2.2 logstash数据流向)

3.Kibana服务

(二)ELK工作流程

(三)ELK的应用价值

二、部署搭建ELK

(一)搭建Elasticsearch集群

1.安装JDK

2.安装elasticsearch

3.修改配置文件

4.使用浏览访问节点信息

5.安装插件

6.插入索引

(二)搭建Logstash

1.下载http服务

2.安装java环境

3.安装logstash

4.测试logstash

5.定义logstash配置文件

(三)安装kibana

(四)监控Apache服务器日志

1.开启apache服务

2.添加监听信息

3.加载配置文件

三、搭建ELK+filebeat

(一)Filebeat基本介绍

(二)部署ELK+filebeat

1.下载安装filebeat

2.修改yml文件

3.修改logstash服务配文文件

4.查看信息

总结


引言

在大数据时代,日志管理与分析已经成为运维、开发和业务优化中不可或缺的一环。而ELK ,即Elasticsearch、Logstash、Kibana三者组成的开源解决方案,以其强大的实时数据分析能力,在业界广受好评,被誉为"日志处理界的瑞士军刀"。

一、ELK简介

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求

(一)基本概述

1.Elasticsearch服务

Elasticsearch: 作为一款分布式、RESTful 风格的搜索引擎,Elasticsearch 提供了近实时的全文搜索和分析功能。它能高效地存储、检索和分析海量数据,并且支持水平扩展,以满足大规模数据处理的需求。

2.Logstash服务

Logstash: Logstash 是一个开源的数据收集引擎,可以同时从多个来源采集数据,然后进行过滤、转换,最终将结构化或非结构化的数据输出到你希望的目的地(如 Elasticsearch)。无论是系统日志、数据库记录还是应用程序日志,Logstash 都能轻松应对。

2.2 logstash关键组件

logstash有三个关键组件,分别为:input、filter、output

1. Input(输入) Input 组件是 Logstash 数据处理的第一环节,它负责从不同的数据源捕获和收集数据。这些数据源可以是本地文件、网络socket、数据库、消息队列(如 Kafka)、 syslog 服务、Beats 系列工具(如 Filebeat)等等。Logstash 支持多种输入插件,使得它能够从多样化的环境中实时抓取数据。

2. Filter(过滤器) Filter 组件位于 Input 和 Output 之间,它是数据处理的核心部分,用于对从 Input 获取的原始事件进行清洗、转换和增强。Filter 可以用来解析日志格式、去除无关信息、添加标签、进行地理编码、加密解密数据、甚至进行条件判断和数据映射等操作。常见的过滤器包括 grok(用于解析非结构化日志)、mutate(修改字段值或删除字段)、geoip(地理位置信息处理)等。

3. Output(输出) Output 组件是 Logstash 流水线的最后一个阶段,负责将经过 Filter 处理后的结构化数据发送到目标存储或系统。常见的 Output 包括 Elasticsearch(用于日志分析和搜索)、Redis(缓存或消息队列)、MySQL 或其他关系型数据库(持久化存储)、甚至是邮件服务器(发送报警通知)等。

2.2 logstash数据流向

数据在 Logstash 中的流转过程如下

① 从某个数据源(如日志文件)通过 file 输入插件收集原始日志数据。

② 收集的数据进入 Filter 阶段,通过 grok 过滤器解析日志格式,提取有用信息,并可能通过 date 过滤器标准化时间戳。

③ 经过处理的事件被送至 Output 阶段,通过 elasticsearch 输出插件将结构化日志数据推送到 Elasticsearch 集群,以便后续的搜索、分析和可视化。

3.Kibana服务

Kibana: Kibana 是一个可视化平台,它可以对 Elasticsearch 中的数据进行深度分析和展示。通过构建丰富的仪表板和交互式图表,用户能够以直观的方式对日志数据进行实时监控、问题定位和趋势分析。

(二)ELK工作流程

通常情况下,ELK的工作流程如下

1.在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。

2.Logstash 负责收集来自不同源的日志数据,将这些原始日志数据经过解析、过滤。而后存入 Elasticsearch

3.Elasticsearch 进行索引和存储

4.最后,用户可以通过 Kibana 对这些已结构化的日志数据进行查询、分析并生成可视化报告。并进行前端数据的展示。

(三)ELK的应用价值

ELK Stack的整体应用价值在于

构建集中式日志管理系统,提升运维效率。

实现实时监控和告警,保障系统稳定性。

助力企业实现大数据分析和BI需求,推动业务发展。

二、部署搭建ELK

环境准备

|------------|---------------------|------------------------------------------------|
| 主机名 | IP地址 | 安装服务 |
| node1 | 192.168.83.30 | elasticsearch-6.6.1 elasticsearch-head |
| node2 | 192.168.83.40 | elasticsearch-6.6.1 |
| http | 192.168.83.60 | logstash-6.6.1 httpd |
| kibana | 192.1768.83.100 | kibana-6.6.1 |

(一)搭建Elasticsearch集群

环境准备

|-------------------|-----------|-------------------------|
| IP地址 | 主机名 | 安装软件 |
| 192.168.83.30 | node1 | elasticsearch-6.6.1 |
| 192.168.83.40 | node1 | elasticsearch-6.6.1 |

1.安装JDK

最小化安装的需要使用yum install java -y 下载安装java环境,图形界面默认安装的java环境,不过默认的JDK环境是OPENJDK,建议安装jdk

使用脚本进行安装

cs 复制代码
#!/bin/bash
JAVA=`find  / -name  *jdk*tar*  -exec dirname {} \;`
#找到jdk的压缩包所在目录,并将设置为变量JAVA
JDK=`find  /  -name  *jdk*tar* 2>>/dev/null |awk  -F/ '{print $NF}'`
#找打jdk压缩包的名字,设置为变量JDK
cd ${JAVA}
tar xf ${JDK} -C /usr/local/
#切换到压缩包所在目录,并指定解压到/usr/local/目录下
JDKAPP=`find  /usr/local/   -maxdepth 1  -type  d  |grep  jdk|awk  -F/  '{print  $NF}'`
#找到解压后的目录名,并设置为变量名JDKAPP
ln  -s  /usr/local/${JDKAPP}  /usr/local/jdk
#做软链接,便于shell环境识别命令
cat > /etc/profile.d/jdk.sh  <<EOF
export JAVA_HOME=/usr/local/jdk
export PATH=\$JAVA_HOME/bin:\$PATH
export JRE_HOME=\$JAVA_HOME/jre 
export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/
EOF
#修改环境变量
echo "请执行  source /etc/profile.d/jdk.sh 命令,刷新文件

2.安装elasticsearch

可以直接使用rmp包进行安装

3.修改配置文件

安装完毕后先修改配置文件再启动服务

两台服务器同样操作

cs 复制代码
cluster.name: elk-cluster
#设置Elasticsearch集群的名称为 "elk-cluster"。
#这意味着所有带有相同cluster.name配置的Elasticsearch节点将会尝试加入同一个集群。

node.name: node1
#指定当前节点的名字为 "node1",进行区分,便于集群内部管理和监控集群中的各个节点。

path.data: /data/elk_data
#设置Elasticsearch数据存储路径,这是Elasticsearch存放索引数据的地方。

path.logs: /var/log/elasticsearch
#设置Elasticsearch日志文件的存放路径,Elasticsearch的所有日志都会写入到这个目录下的文件

bootstrap.memory_lock: false
#设置为 "false" 表示不锁定内存。
#若设为 true,Elasticsearch将尝试锁定全部分配给它的内存,防止在操作系统层面被交换到磁盘。
#在生产环境中,通常建议开启内存锁定以获得更好的性能和稳定性,但需要有足够的权限,并确保物理内存充足。

network.host: 0.0.0.0
#设置为 "0.0.0.0",表示Elasticsearch节点监听所有可用网络接口上的连接请求,对外提供服务。

http.port: 9200
#设置HTTP协议的服务端口为 "9200"

discovery.zen.ping.unicast.hosts: ["node1", "node2"]
#设置Elasticsearch集群发现机制的初始节点列表,这里包含了 "node1" 和 "node2" 两个节点地址。
#集群中的节点通过互相ping这些地址来发现彼此并组建集群。
#在启动过程中,节点会尝试联系这个列表中的其他节点来参与集群。

修改完毕后启动服务

4.使用浏览访问节点信息

cs 复制代码
"name": "node1"
表明此节点在Elasticsearch集群中的名称为"node1"。

"cluster_name": "elk-cluster"
表示此节点属于名为"elk-cluster"的Elasticsearch集群。

"cluster_uuid": "DyYgn-Z2TumAOAs1xPU7iQ"
是集群的唯一标识符,用于区分不同的Elasticsearch集群。

"version"
对象中包含有关Elasticsearch版本的具体信息:

"number": "6.6.1"
表示Elasticsearch的版本号为6.6.1。
"build_flavor": "default"
说明构建类型为默认版本。
"build_type": "rpm"
指出此版本是通过RPM包构建的,适用于基于RPM包管理系统的Linux发行版,如Red Hat或CentOS。
"build_hash": "1fd8f69"
构建哈希值,用于标识具体的构建版本。
"build_date": "2019-02-13T17:10:04.160291Z"
构建日期和时间,说明此版本是在2019年2月13日17点10分04秒UTC时间构建的。
"build_snapshot": false
表示这是一个正式发布的版本,而非snapshot快照版本。
"lucene_version": "7.6.0"
使用的Lucene搜索引擎内核版本为7.6.0。
"minimum_wire_compatibility_version": "5.6.0"
标明此Elasticsearch版本支持的最低网络通信兼容版本为5.6.0,即与5.6.0及以上版本的节点可以正常通信。
"minimum_index_compatibility_version": "5.0.0"
表示此Elasticsearch版本能够处理的最小索引兼容版本为5.0.0,即可以读取和管理5.0.0及以上版本创建的索引。
"tagline": "You Know, for Search"
Elasticsearch的标志性标语,强调它是一款强大的搜索工具

浏览器访问 http://192.168.10.13:9200/_cluster/health?pretty 查看健康情况

绿色:健康 数据和副本 全都没有问题

红色:数据都不完整

黄色:数据完整,但副本有问题

5.安装插件

为了更加直观的查看节点信息,可以安装elasticsearch-head插件

Elasticsearch-Head 是一个针对 Elasticsearch 的开源 web 界面管理工具,它提供了简洁直观的方式来查看和管理 Elasticsearch 集群的各项信息,包括但不限于索引列表、文档内容、节点状态、分片分布、集群健康状况、性能统计等。这个工具特别适合于日常的 Elasticsearch 集群运维和监控任务,因为它提供了比原生 REST API 更为友好的图形化界面。

Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。

安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。

node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

cs 复制代码
[root@node1 opt]#ls
elasticsearch-6.6.1.rpm  elasticsearch-head.tar.gz node-v8.2.1.tar.gz 
phantomjs-2.1.1-linux-x86_64.tar.bz2
#准备好elasticsearch-head、node、phantomjs三个软件包

5.1 安装node

cs 复制代码
[root@node1 opt]#yum install gcc gcc-c++ make -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
....................
#安装编译环境
[root@node1 opt]#tar xf node-v8.2.1.tar.gz
#解压软件包
[root@node1 opt]#cd  node-v8.2.1/
[root@node1 node-v8.2.1]#./configure
......
[root@node1 node-v8.2.1]#make -j 4 && make install
......
#安装过程会有点久,需要耐心等待

5.2 安装phantomjs

cs 复制代码
[root@node1 opt]#tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
#解压至/usr/local/src/
[root@node1 opt]#cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]#ls
phantomjs
[root@node1 bin]#cp phantomjs /usr/local/bin/
#将命令拷贝到/usr/local/bin/,使phantomjs命令在任何目录下都可以使用

5.3 安装Elasticsearch-head

cs 复制代码
[root@node1 bin]#cd  /opt
[root@node1 opt]#tar xf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]#cd  /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]#ls
Dockerfile                          grunt_fileSets.js  package.json                  README.textile
Dockerfile-alpine                   index.html         package-lock.json             _site
elasticsearch-head.sublime-project  LICENCE            plugin-descriptor.properties  src
Gruntfile.js                        node_modules       proxy                         test
[root@node1 elasticsearch-head]#npm  install
#执行npm  install,安装所有依赖项(node_modules目录下)
......

5.4 修改Elasticsearch主配置文件

cs 复制代码
http.cors.enabled: true				#开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"			#指定跨域访问允许的域名地址为所有

5.5 启动elasticsearch-head服务

必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败

5.6 使用浏览器访问

首先使用浏览器访问服务器的9100端口,因为elasticsearch-head 监听的端口是 9100

6.插入索引

cs 复制代码
curl
#是一个用于发送HTTP请求的命令行工具。

-X PUT
#指定了HTTP方法为PUT,这里用于在Elasticsearch中创建或更新文档。

'localhost:9200/index-demo1/test/1'
#请求的目标URL,其中:
#localhost:9200 是Elasticsearch服务的主机地址和端口。
#index-demo1 是要操作的索引名称。
#test 是索引下的类型
#1 是待插入或更新的文档ID。

?pretty&pretty
#两个pretty参数用于美化返回的结果,使其更易阅读。

-H 'Content-Type: application/json'
#指定请求头中的Content-Type为application/json,说明传输的数据格式是JSON。

-d '{"user":"lisi","mesg":"hello"}'
#-d 参数后面跟着的是要发送的实际数据,这里是一个简单的JSON对象,
#表示要插入的文档内容,包含两个字段:user 和 mesg。

综合起来,这个命令的作用是在Elasticsearch的index-demo1索引中(如果索引不存在,
Elasticsearch将在插入文档时自动创建索引),创建或更新一个ID为1的文档,文档内容
是{"user": "lisi", "mesg": "hello"}。如果索引已存在且ID为1的文档也已存在,则
会更新该文档内容;否则,会创建一个新的文档。

在浏览器访问查看索引信息,可以看见索引默认被分片5个,并且有一个副本(在node2)备份文件

(二)搭建Logstash

环境准备

|-------------------|----------|------------------------------|
| IP地址 | 主机名 | 安装软件 |
| 192.168.83.30 | http | logstash-6.6.1 httpd |

Logstash 一般部署在需要监控其日志的服务器。Logstash部署在 Apache 服务器上,用于收集 Apache 服务器的日志信息并发送到 Elasticsearch。

1.下载http服务

yum install httpd -y

2.安装java环境

同样使用脚本进行安装

3.安装logstash

准备好rpm包,直接使用rpm命令安装

4.测试logstash

Logstash 命令常用选项:

-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。

-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。

-t:测试配置文件是否正确,然后退出。

命令解释

cs 复制代码
logstash -e 'input { stdin{} } output { stdout{} }'

logstash   、
#这是Logstash命令行工具,用于处理和传输数据。

-e
#这是一个命令行参数,允许用户在命令行中直接指定Logstash的配置字符串,而不是从配置文件中读取。

配置字符串内容详解:

input { stdin{} }
#定义了一个输入插件(input plugin),这里是stdin,表示从标准输入(键盘输入)读取数据。
#当运行这个命令后,可以开始在终端窗口输入数据,这些数据会被Logstash捕获。

output { stdout{} }
#定义了一个输出插件(output plugin),这里是stdout,表示将处理过的数据输出到标准输出(屏幕)
#因此,当在终端输入数据后,Logstash会捕获这些数据并将其打印回同一终端窗口

输出信息解释

cs 复制代码
"host"=> "http"
#这是一个字段,表示产生这条日志事件的源头主机名或地址。

@timestamp => 2024-04-10T10:29:14.908Z,
#这是Elasticsearch和Logstash中通用的时间戳字段,记录了该事件发生的时间。
#在这个例子中,事件发生在2024年4月10日10点29分14.908秒(协调世界时,UTC)。

"message"=> "192.168.83.40"
#这是日志消息的主要内容,即原始日志文本,此处记录的是一个具体的IPv4地址192.168.83.40。

@version"=> "1"
#表示日志事件的版本信息,这里标记为1,是Logstash标准化事件格式的一部分。

在实际生产环境中,Logstash通常会连接到更复杂的数据源(如文件、数据库、网络接口等)并将数据输出到长期存储(如Elasticsearch)或其他系统(如消息队列、文件等)

使用logstash将信息写入Elasticsearch中

通过浏览器可以查看到索引信息

5.定义logstash配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。

input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等

filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式

output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch

cs 复制代码
input {                                  #定义input部分
    file{                                #指定路径读取日志数据
        path =>"/var/log/messages"       #监控的日志文件路径
        type =>"logs"               #设置了输入数据的类型为"logs",自定义
        start_position =>"beginning"     
#指定从文件的开头开始读取日志,即使Logstash在此之前已经运行过,也会重新读取整个文件。
    }   
#注意空格位置,与file插件的f字母对齐,运行在java环境下的程序,对空格与缩进要求比较高
}
output {                                    #定义input部分
    elasticsearch {                         #将处理过的数据发送到Elasticsearch集群。
        hosts => ["192.168.83.30:9200"]     #指定了Elasticsearch集群的地址和端口
        index =>"logs-%{+YYYY.MM.dd}" 
#设置了输出索引的名称,其中 %{+YYYY.MM.dd} 是一个动态时间格式化表达式,
#表示每天创建一个新的索引,索引名称会随着日期的变化而变化,例如:"logs-2024.04.11"。
    }
#同样注意对齐
}

(三)安装kibana

环境准备

|-------------------|------------|------------------|
| IP地址 | 主机名 | 安装软件 |
| 192.168.83.30 | kibana | kibana-6.6.1 |

将kibanaan安装在节点1机器上,也可以使用新的机器进行安装

修改配置文件

cs 复制代码
server.port: 5601
#指定了Kibana服务监听的HTTP端口,Kibana Web界面将通过这个端口提供服务

server.host: "0.0.0.0"
#配置了Kibana服务绑定的主机地址。这里的"0.0.0.0"意味着Kibana将监听所有的网络接口

elasticsearch.hosts: ["http://192.168.83.30:9200"]
#指定了Kibana与之通信的Elasticsearch集群地址和端口。在这个配置下,
#Kibana将连接到IP地址为192.168.83.30的服务器上的Elasticsearch服务,该服务监听9200端口。

kibana.index: ".kibana"
#设定Kibana在Elasticsearch中用于存储其元数据、配置信息和索引模式的索引名称,
#默认为".kibana"。这个索引是Kibana的核心配置和状态存储库。

使用浏览器访问elasticsearch服务器

可以看到已经存在了.kibana的索引信息,而后使用浏览器访问kinaba服务器

创建模块索引

使用模块索引查看信息

也可以指定查看字段信息

(四)监控Apache服务器日志

将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

1.开启apache服务

2.添加监听信息

3.加载配置文件

执行:logstash -f /etc/logstash/conf.d/apache.conf命令

启动Logstash,并加载指定的配置文件来运行数据处理管道

使用浏览器访问elasticsearch服务

同样可以在kibana服务中创建模块索引进行查看

三、搭建ELK+filebeat

环境准备

|--------------|---------------------|------------------------------------------------|
| 主机名 | IP地址 | 安装服务 |
| node1 | 192.168.83.30 | elasticsearch-6.6.1 elasticsearch-head |
| node2 | 192.168.83.40 | elasticsearch-6.6.1 |
| http | 192.168.83.60 | logstash-6.6.1 httpd |
| kibana | 192.1768.83.100 | kibana-6.6.1 |
| filebeat | 192.168.83.50 | filebeat-6.6.1 |

(一)Filebeat基本介绍

Filebeat是Elastic Beats系列中的一个轻量型日志采集器,它主要用于从服务器上的日志文件中读取数据,并将这些数据转发到Elasticsearch、Logstash或其他输出目的地进行存储、分析和可视化。Filebeat设计目标是在尽可能减少资源消耗的前提下高效地收集日志数据。

使用Filebeat的好处包括:

轻量级:Filebeat占用系统资源少,适合部署在生产环境中进行实时日志收集。

模块化:Filebeat包含许多预配置的模块,可以直接使用这些模块快速地从常见服务(如Apache、Nginx、MySQL等)的日志文件中收集数据。

灵活性:支持自定义配置,可以根据实际需求配置哪些文件需要收集,以及如何解析这些文件中的日志内容。

高效性:Filebeat仅读取和传输日志文件中的新增内容,而非全量读取,降低了对系统IO的影响。

可靠传输:Filebeat具有内置的重试和缓冲机制,确保日志数据能够安全到达目标系统,如Elasticsearch或Logstash。

扩展性:可以与Elasticsearch、Logstash、Kibana等工具紧密结合,形成一套完整的日志收集、处理、存储和分析解决方案。

(二)部署ELK+filebeat

1.下载安装filebeat

2.修改yml文件

该配置文件主要分为三个部分

cs 复制代码
filebeat.inputs:   #输入配置

- type: log        #Filebeat被配置为从磁盘上的日志文件收集数据,类型(type)为"log"。
enabled: true      #表示启用这个输入模块。
paths              #列表中指定了两个日志文件路径,表示从这两个文件中获取日志信息
/var/log/messages  #这是Linux系统中的系统日志文件。
/var/log/*.log     #这个通配符路径会匹配/var/log目录下所有以.log结尾的日志文件。

fields:            #附加字段
#在每个收集到的日志事件上添加额外的上下文信息,方便在Elasticsearch中做进一步的筛选和分析

service_name: filebeat_server
#定义了一个名为service_name的字段,并赋值为filebeat_server。
log_type: log     
#定义了一个名为log_type的字段,并赋值为log。
service_id: 192.168.83.50
#定义了一个名为service_id的字段,并赋值为192.168.83.50。

#输出配置。
output.logstash:     
#表示输出类型为Logstash。Filebeat被配置将收集到的数据发送到Logstash
hosts: ["192.168.83.60:5044"] 
#指定了Logstash服务器的地址和监听端口,Filebeat将会把收集到的日志事件推送到这个地址。

3.修改logstash服务配文文件

cs 复制代码
input {
#输入部分,这部分配置了Logstash接收来自Beats(如Filebeat、Metricbeat等)的数据输入方式:
    beats {
        port => "5044"
    }
}
#在这段配置中,Logstash监听5044端口,等待接收来自Beats客户端的数据。
#这意味着Filebeat等Beats产品在收集到日志或监控数据后,会通过TCP协议将数据发送到这个端口。

output {
#输出配置: 这部分配置了Logstash将处理完的数据输出到Elasticsearch:
    elasticsearch {
        hosts => ["192.168.83.30:9200"]
#指定输出的elasticsearch集群的IP地址及端口号
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
#index字段指定了Elasticsearch中索引的名称格式,采用动态索引命名策略,
#索引名称由fields字段下的service_name字段值与当前日期(格式为YYYY.MM.dd)拼接而成
    }
}
#在这段配置中,Logstash将处理后的数据发送到Elasticsearch集群,集群地址为192.168.83.30,
#端口为9200。这意味着每条数据将根据其携带的service_name字段值和数据处理当天的日期生成
#唯一的索引名称。

#综上所述,Logstash通过这段配置接收来自Beats的数据,并将其输出到指定的Elasticsearch集群,
#同时根据数据中的service_name字段值按天划分索引,便于后期日志管理和分析。

4.查看信息

访问elasticsearch服务进行查看

可以查看到filebeat的索引信息

创建模块索引

查看模块索引

这样就可以看到filebeat应用服务器上的/var/log/messages以及/var/log/目录下所有以.log结尾的文件,也就是除指定的其它日志文件位置与名称,可以收集到该服务器当中所有的日志信息

总结

ELK在多种场景下都发挥着重要作用,包括但不限于

系统和应用日志监控:实时查看系统运行状态,快速定位故障原因。

业务数据分析:通过对大量业务日志的深度挖掘,获取用户行为模式、产品性能表现等关键信息,驱动产品迭代与优化。

安全审计:记录并追踪系统操作行为,为安全事件回溯提供依据。

不过在使用的过程中需要注意的几个点

1.版本兼容性问题

因为安装ELK的软件较多,所以在选择版本时,需要选择相对应的版本,防止因为版本不兼容问题,导致日志信息无法收集,作为运维人员,需要即使进行版本迭代,不仅帮助自己更好的进行日常巡检,也为开发人员提高有效信息

2.yml文件的配置

因为ELK的应用基本都是运行在java环境下,在进行yml文件编辑时,一定要注意空格的问题,这涉及到配置文件的层级问题,例如input属于一级标题,file为二级标题,file字段就需要进行缩进,以此类推

在生产环境中,这十分致命,因为它不会有报错信息,在查找问题时无从下手,这就需要一定的经验累积

3.数据流向问题

数据流向是我们运维人员在进行故障处理时,必须要掌握的知识点,到底是logstash没有接收到应用服务器的日志信息,还是接收到之后没有发送到elasticsearch服务,这对于我们进行排查错误信息非常重要,能够快速的解决故障问题,不仅仅是在ELK服务中。

在生产环境中还会有一些其它的问题会发生,这就需要我们平时的日积月累,积攒经验,才能够有效的排除故障问题,完成好项目

相关推荐
_.Switch13 分钟前
Python 自动化运维持续优化与性能调优
运维·开发语言·python·缓存·自动化·运维开发
南猿北者18 分钟前
Docker Volume
运维·docker·容器
Ztiddler5 小时前
【Linux Shell命令-不定期更新】
linux·运维·服务器·ssh
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
IPdodo全球网络5 小时前
如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
运维·服务器
运维&陈同学6 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
m0_519523106 小时前
Linux——简单认识vim、gcc以及make/Makefile
linux·运维·vim
mit6.8247 小时前
[Docker#4] 镜像仓库 | 部分常用命令
linux·运维·docker·容器·架构
zyp2468107 小时前
Linux之DNS服务器
linux·运维·服务器
wdxylb7 小时前
将C++搭建的简单HTTP服务器升级为 HTTPS 服务器
运维·服务器·https