当前位置: 首页 > news >正文

部署ELK8.18对日志进行收集、展示

实验环境

192.168.10.40需要安装Elasticsearch和Kibana,都为java程序,占用内存会很大,将内存设为8G

一、ELK简介

ELK Stack 是 Elasticsearch、Logstash 和 Kibana 三个开源工具的组合,用于日志收集、存储和可视化分析。

Elasticsearch - 分布式搜索和分析引擎

Logstash - 服务器端数据处理管道

Kibana - 数据可视化仪表板工具

1、Elasticsearch

功能:

        分布式、RESTful 搜索和分析引擎

        基于 Apache Lucene 构建

        提供近实时(NRT)的搜索能力

        支持水平扩展和高可用性

特点:

        文档导向:存储数据为 JSON 文档

        强大的全文搜索能力

        支持复杂的聚合操作

        丰富的 API 和查询语言

2、Logstash

功能:

        数据收集和处理管道

        从多种来源采集数据

        转换和丰富数据

        将数据发送到各种"存储库"(如 Elasticsearch)

处理流程:

        Input:从文件、数据库、消息队列等获取数据

        Filter:解析、转换和丰富数据(如解析日志格式)

        Output:将处理后的数据发送到目的地(通常是 Elasticsearch)

3、Kibana

功能:

        数据可视化和探索工具

        为 Elasticsearch 提供图形界面

        创建丰富的仪表板和报表

        提供强大的数据分析和可视化功能

主要特性:

        丰富的图表类型(柱状图、线图、饼图等)

        地图可视化

        时间序列分析

        机器学习集成

        警报和通知功能

二、部署ELK

1、安装 Elasticsearch(192.168.10.40)

(1)上传elasticsearch-8.18.3-x86_64.rpm包到/root目录并安装

rpm -ivh elasticsearch-8.18.3-x86_64.rpm

超级用户密码

elastic用户:内置的超级管理员账号,拥有所有权限。

密码:首次安装时自动生成的密码rxrEobl3i-mg-WDComqa

立即记录此密码(首次登录 Kibana 或调用 ES API 时需要)。

(2)配置 Elasticsearch JVM

/etc/elasticsearch/jvm.options 是 Elasticsearch 的 JVM(Java 虚拟机)参数配置文件,主要用于设置 Elasticsearch 运行时的内存分配和垃圾回收等参数。

vim /etc/elasticsearch/jvm.options

修改:

建议将这两个值设置为相同,以避免运行时内存调整带来的性能开销

推荐设置为不超过物理内存的50%,且不超过32GB(由于JVM内存指针压缩技术限制)

(3)配置Elasticsearch

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bakvim /etc/elasticsearch/elasticsearch.yml

修改:

(4)启动Elasticsearch服务

systemctl enable --now elasticsearchss -naplt | grep java

(5)使用浏览器访问 Elasticsearch

给浏览器添加elasticsearch-head插件

插件下载地址:https://crxdl.com/

2、安装 Kibana(192.168.10.40)

(1)上传kibana-8.18.3-x86_64.rpm包到/root目录并安装

rpm -ivh kibana-8.18.3-x86_64.rpm

(3)配置 Kibana

cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bakvim /etc/kibana/kibana.yml

修改:

(4)启动 Kibana服务

systemctl enable --now kibanass -anplt | grep 5601

(5)使用浏览器访问Kibana

192.168.10.40:5601

3、Elasticsearch插件(192.168.10.40)

(1)使用Kibana 开发工具查看集群中索引的概要信息

(2)安装analysis-icu插件

安装Elasticsearch 官方提供的文本分析插件analysis-icu

/usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu

查看 Elasticsearch 中已安装的插件

/usr/share/elasticsearch/bin/elasticsearch-plugin list

重启elasticsearch服务加载插件

systemctl restart elasticsearch

(3)使用analysis-icu分词

(4)安装ik插件给中文分词

插件地址:https://release.infinilabs.com/analysis-ik/stable/

wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.18.3.zipunzip elasticsearch-analysis-ik-8.18.3.zip -d elasticsearch-analysis-ikcp -r elasticsearch-analysis-ik /usr/share/elasticsearch/plugins/

查看 Elasticsearch 中已安装的插件

/usr/share/elasticsearch/bin/elasticsearch-plugin list

重启elasticsearch服务加载插件

systemctl restart elasticsearch

(5)使用ik分词

核心区别

特性

ik_smart

ik_max_word

standard

设计目标

精确匹配、短语查询

高召回率、模糊搜索

通用西文分词

中文支持

✔️ 优化中文处理

✔️ 优化中文处理

❌ 逐字拆分,无中文优化

适用场景

分词器

推荐场景

不适用场景

ik_smart

精确搜索(如商品名称、ID)

短语查询

需要模糊匹配或同义词扩展的场景

ik_max_word

内容搜索(如文章、评论)

需要高召回率的场景

对精度要求高且数据量大的场景

standard

英文/拉丁语系文本

不需要语言分析的场景(如日志、代码)

中文文本处理(会逐字拆分)

4、安装 Logstash(192.168.10.41)

(1)上传logstash-8.18.3-x86_64.rpm包到/root目录并安装

rpm -ivh logstash-8.18.3-x86_64.rpm

(2)创建配置文件

参考elastic官方文档:https://www.elastic.co/docs/reference/logstash/plugins

将 /var/log/messages 的系统日志发送到 Elasticsearch

cd /etc/logstash/conf.d/vim messagetest.conf

添加:

input {file {path => ["/var/log/messages"]  # 监控的文件路径start_position => "beginning"  # 从文件开头读取(首次运行时)}}output {elasticsearch {hosts => ["http://192.168.10.40:9200"]  # ES地址index => "message_%{+yyyy.MM.dd}"  # 按日创建的索引名}}

(3)启动Logstash

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/messagetest.conf

(4)查找索引

(5)创建数据视图

5、使用Logstash收集nginx的日志发送到 Elasticsearch(192.168.10.41)

(1)安装nginx服务并启动

dnf -y install nginxsystemctl enable --now nginx

(2)模拟访问网站生成日志

curl http://192.168.10.41

(2)创建收集nginx访问日志的配置文件

cd /etc/logstash/conf.d/vim nginx_access_log.conf

添加:

input {file {path => ["/var/log/nginx/access.log"]start_position => "beginning"}}output {elasticsearch {hosts => ["http://192.168.10.40:9200"]index => "nginx_access_%{+yyyy.MM.dd}"}}

(3)启动Logstash

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access_log.conf

(4)查找索引

(5)创建数据视图

这种日志格式是将原始日志直接传输过来,所以信息都挤在单个字符串中,缺乏结构化数据,基本无用。

6、使用Logstash收集nginx的JSON格式日志发送到 Elasticsearch(192.168.10.41)

(1)将nginx的日志修改为JSON格式

变量参考nginx官方文档:https://nginx.org/en/docs/varindex.html

vim /etc/nginx/nginx.conf

添加粗体部分修改:

http {

……

    log_format json_combined escape=json

      '{'

        '"time_local":"$time_local",'

        '"remote_addr":"$remote_addr",'

        '"remote_user":"$remote_user",'

        '"request":"$request",'

        '"status":"$status",'

        '"body_bytes_sent":"$body_bytes_sent",'

        '"request_time":"$request_time",'

        '"http_referer":"$http_referer",'

        '"http_user_agent":"$http_user_agent",'

        '"http_x_forwarded_for":"$http_x_forwarded_for",'

        '"server_name":"$server_name",'

        '"upstream_addr":"$upstream_addr",'

        '"upstream_response_time":"$upstream_response_time",'

        '"upstream_status":"$upstream_status",'

        '"scheme":"$scheme",'

        '"request_method":"$request_method",'

        '"request_uri":"$request_uri",'

        '"server_protocol":"$server_protocol",'

        '"bytes_sent":"$bytes_sent",'

        '"connection":"$connection",'

        '"connection_requests":"$connection_requests",'

        '"msec":"$msec",'

        '"pipe":"$pipe",'

      '}';

(2)重启nginx服务

systemctl restart nginx

(3)模拟访问网站生成JSON格式日志

curl http://192.168.10.41

(4)启动Logstash

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access_log.conf

(5)查看数据视图

现在看到的日志为JSON格式,键对应值。有些日志也不适合JSON格式。

7、使用Logstash收集nginx的日志,通过filter对日志进行处理,并使用filter的插件grok对字段提取,发送到 Elasticsearch(192.168.10.41)

(1)修改nginx日志格式

vim /etc/nginx/nginx.conf

修改:

(2)重启nginx服务

systemctl restart nginx

(3)模拟访问网站生成日志

curl http://192.168.10.41

(4)创建收集nginx访问日志的配置文件

查看Grok每个参数所匹配的内容参考Grok官方:https://github.com/logstash-plugins/logstash-patterns-core/blob/main/patterns/ecs-v1/grok-patterns

cd /etc/logstash/conf.d/vim nginx_filter_access_log.conf

添加:

input {file {path => ["/var/log/nginx/access.log"]start_position => "beginning"}}filter {grok {match => {"message" => ['%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:timestamp}\] "%{WORD:http_method} %{URIPATH:url_path}(?:%{URIPARAM:url_query})? HTTP/%{NUMBER:http_version}" %{NUMBER:status:int} %{NUMBER:bytes_sent:int} "%{DATA:referrer}" "%{DATA:user_agent}" "%{DATA:x_forwarded_for}"']}}}output {elasticsearch {hosts => ["http://192.168.10.40:9200"]index => "nginx_filter_access_log_%{+yyyy.MM.dd}"}}

声名:

%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:timestamp}\] "%{WORD:http_method} %{URIPATH:url_path}(?:%{URIPARAM:url_query})? HTTP/%{NUMBER:http_version}" %{NUMBER:status:int} %{NUMBER:bytes_sent:int} "%{DATA:referrer}" "%{DATA:user_agent}" "%{DATA:x_forwarded_for}也可以用一个"%{COMBINEDAPACHELOG}"来表示,但是每个键的名称是定义好的,生产中也不会使用。

使用kibana对语法进行检测

cat /var/log/nginx/access.log

192.168.10.41 - - [10/Jul/2025:10:48:19 +0800] "GET / HTTP/1.1" 200 7620 "-" "curl/7.76.1" "-"

(5)启动Logstash

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_filter_access_log.conf

也可以使用systemctl start logstash启动,会读/etc/logstash/conf.d下的配置文件,全部启动

(6)查找索引

(7)创建数据视图

可以看到每个键对应的值

(8)创建Dashboards(仪表板)

(8.1)创建网站PV(页面浏览量)的可视化看板

因为是页面浏览量,选择那个都可以

测试(192.168.10.41)

安装压测工具模拟访问量

dnf -y install httpd-tools

ab -c 10 -n 100 http://192.168.10.41/

(8.2)创建网站UV(独立访客量)的可视化看板

测试

使用192.168.10.40和宿主机访问192.168.10.41的网页

curl http://192.168.10.41

(8.3)创建网站总流量消耗的可视化看板

修改字段bytes_sent的单位格式

(8.4)返回主页访问已存在的Dashboards

(8.5)创建访问网站状态码的可视化看板

测试(192.168.10.41)

使用压测工具模拟生成错误访问日志

ab -c 10 -n 100 http://192.168.10.41/aa

(8.6)创建每个IP访问网站页面数量的可视化看板

测试

使用192.168.10.1(宿主机)访问192.168.10.41的网页并刷几次

(8.7)创建每个URL访问数量的可视化看板

测试(192.168.10.41)

使用压测工具模拟生成/目录访问量

ab -c 10 -n 100 http://192.168.10.41/

8、查看kibana样例数据

http://www.dtcms.com/a/321599.html

相关文章:

  • 1Panel Agent 证书绕过实现远程命令执行漏洞复现(CVE-2025-54424)
  • 【Spring Boot 快速入门】八、登录认证
  • Java 大视界 -- Java 大数据机器学习模型在金融风险传染路径模拟与防控策略制定中的应用(387)
  • [Oracle] LEAST()函数
  • CORS 跨域问题 Next.js 跨域问题放通
  • HttpURLConnection (JDK原生)和Hutool HTTP工具的区别
  • GStreamer:开源多媒体框架技术详解与应用实践
  • c++初学day1(类比C语言进行举例,具体原理等到学到更深层的东西再进行解析)
  • 从0配置yolo实例分割(ubuntu)
  • 五种IO模型与⾮阻塞IO
  • 无人机仿真环境搭建
  • 二叉树实现
  • 【科研绘图系列】R语言绘制气泡图
  • [LLM 应用评估] 提示词四大要素 | 评估样本_单次交互快照 | 数据集 | Hugging Face集成
  • 杰理ac791 [Info]: [LL_S]Recv - LL_CHANNEL_MAP_REQ
  • JAVA基础-集合框架
  • 特征值和特征向量的直觉
  • 自适应反步控制:理论与设计
  • 网络基础浅谈
  • NVME M.2 SSD固态硬盘掉盘:也可能是主板出问题
  • 【Layui】调整 Layui 整体样式大小的方法
  • 【Lua】XLua一键构建工具
  • 关于 Rust 异步底层实现中 waker 的猜测
  • Xiphos 配备 GTH 计算机模块的 Q8J 低 SWaP
  • 基于LLM的Chat应用测试方法探索:系统化评估与持续优化
  • python之注册机制总结
  • 等保测评-Nginx中间件
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在高空抛物检测的实战优化
  • 微软发布Project Ire项目:可自主检测恶意软件的人工智能系统
  • docker下载安装和使用(Hyper-V方式)