案例:ELK日志分析系统

案例:ELK日志分析系统通过对日志的分析 既可以未雨绸缪 预防故障的发生 又可以在故障发生时 寻找蛛丝马迹 快速定位故障点

案例:ELK日志分析系统

        前言:日志分析是运维工程师解决系统故障、发现问题的主要手段。日志包含多种类型,包括程序日志、系统日志以及安全日志等。通过对日志的分析可以快速定位故障点,也可以通过日志了解服务器的软件信息、硬件信息、服务器负荷以及安全性相关的信息。

目录

?案例环境

?部署Elasticsearch

?安装Elasticsearch

?更改主配置文件

?查看节点信息

?安装Elasticsearch-head插件

?编译安装node

?安装phantomjs

?安装Elasticsearch-head

?修改主配置文件

?查看信息

?插入索引

?Logstash安装及使用方法

?安装logstash

?测试logstash

?logstash配置文件

?安装kibana

?Apache配置


        ?:大虾好吃吗

        ?:选择大于努力

        ?:持续更新,一起成长!喜欢的朋友可以关注,谢谢!❤️

        ?ELK

                                            案例:ELK日志分析系统 

        ELK是一套完整的日志集中处理方案,ElasticSearch、Logstash和Kiabana三个开源工具组合使用,可以完成更强大的用户对日志的查询、排序、统计。

Elasticsearch:用于日志的存储和分析

Logstash:用于日志的收集

Kibana:用于查看日志

案例环境

    ?准备三台虚拟机,根据下图配置IP,关闭防火墙和Selinux。node1节点和node2节点分配4GB内存,Apache节点1GB内存。

案例:ELK日志分析系统

?实现功能:

        配置ELK日志分析群集。

        使用Logstash收集日志。

        使用Kibana查看分析日志。

        在两个ELK节点上配置域名解析,通过本地/etc/hosts文件实现。

?Node1配置

[root@localhost ~]# hostnamectl set-hostname node1 [root@localhost ~]# bash [root@node1 ~]# vim /etc/hosts 192.168.1.10 node1 //插入下列两行配置 192.168.1.20 node2 [root@node1 ~]# java -version //检查Java环境 openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)

?Node2配置

[root@localhost ~]# hostnamectl set-hostname node2 [root@localhost ~]# bash [root@node2 ~]# [root@node2 ~]# vim /etc/hosts 192.168.1.10 node1 //插入下列两行配置 192.168.1.20 node2 [root@node2 ~]# java -version //检查Java环境 openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)

部署Elasticsearch

       ?Node1和Node2节点都需要部署Elasticsearch软件,下面以Node1节点为例,Node2节点配置与Node1节点相同(下方配置文件中节点名字分别为node1和node2)。

安装Elasticsearch

[root@node1 ~]# mount /dev/cdrom /media mount: /dev/sr0 is write-protected, mounting read-only [root@node1 ~]# rpm -ivh /media/elasticsearch-5.5.0.rpm warning: /media/elasticsearch-5.5.0.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY Preparing...                         [100%] Creating elasticsearch group... OK Creating elasticsearch user... OK Updating / installing...   1:elasticsearch-0:5.5.0-1         [100%] NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service You can start elasticsearch service by executing sudo systemctl start elasticsearch.service

        ?加载系统服务

[root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable elasticsearch Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

更改主配置文件

        ?以下配置注意去除注释

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml cluster.name: my-elk-cluster //群集名字 node.name: node1 //节点名字(注意,节点2名字改为node2) path.data: /data/elk_data //数据存放路径 path.logs: /var/log/elasticsearch/ //日志存放路径 bootstrap.memory_lock: false //在启动的时候不锁定内存 network.host: 0.0.0.0 //提供服务绑定的IP地址,0.0.0.0代表所有地址 http.port: 9200 //侦听端口 discovery.zen.ping.unicast.hosts: ["node1", "node2"] //群集发现通过单播实现

        ?创建数据存放路径并授权。

[root@node1 ~]# mkdir -p /data/elk_data [root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/

        ?启动并查看端口号

[root@node1 ~]# systemctl start elasticsearch.service [root@node1 ~]# netstat -anpt | grep 9200 //启动后需要稍等一会(30秒)才能查到端口号 tcp6       0     0 :::9200                 :::*                   LISTEN     4952/java           

       ?配置完node1节点后,继续配置node2节点。注意修改主配置文件时,名字的区分。

查看节点信息

        ?在Node1上,打开浏览器输入http://192.168.1.10:9200,可以看到node1的信息。

案例:ELK日志分析系统

        ?在Node2上,打开浏览器输入http://192.168.1.20:9200,可以看到node2的信息。

 案例:ELK日志分析系统

        ?通过浏览器输入http://192.168.1.10:9200/_cluster/health?pretty查看群集的健康情况,可以看到status值为green,表示节点健康运行。

案例:ELK日志分析系统

        ?通过浏览器输入http://192.168.1.10:9200/_cluster/state?pretty查看群集的状态信息。

案例:ELK日志分析系统

        ?通过上述方式查看群集状态对用户并不友好,可以通过安装Elasticsearch-head插件,更好地管理群集。

安装Elasticsearch-head插件

?️在node1节点安装即可。

        安装Elasticsearch-head插件需要作为独立服进行安装,需要npm命令,需要提前安装node和phantomjs,node编译安装时间较久,大约40min,耐心等待。

编译安装node

[root@node1 ~]# tar zxf /media/node-v8.2.1.tar.gz -C /usr/src [root@node1 ~]# cd /usr/src/node-v8.2.1/ [root@node1 node-v8.2.1]# ./configure && make && make install

安装phantomjs

[root@node1 node-v8.2.1]# tar jxf /media/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src [root@node1 node-v8.2.1]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin/ [root@node1 bin]# cp phantomjs /usr/local/bin/

安装Elasticsearch-head

[root@node1 node-v8.2.1]# tar jxf /media/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src [root@node1 node-v8.2.1]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin/ [root@node1 bin]# cp phantomjs /usr/local/bin/ [root@node1 bin]# tar zxf /media/elasticsearch-head.tar.gz -C /usr/src [root@node1 bin]# cd /usr/src/elasticsearch-head/ [root@node1 elasticsearch-head]# npm install //安装依赖包 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/karma/node_modules/chokidar/node_modules/fsevents): npm WARN network SKIPPING OPTIONAL DEPENDENCY: request to https://registry.npmjs.org/fsevents failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443 npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression ​ up to date in 3.826s

修改主配置文件

[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml http.cors.enabled: true //开启跨域访问支持,默认为false http.cors.allow-origin: "*" //跨域访问允许的域名地址 [root@node1 elasticsearch-head]# systemctl restart elasticsearch

?️启动服务

        ?必须在解压后的elasticsearch-head目录下启动,进程会读取该目录下的gruntifile.js文件,否则会启动失败。

[root@node1 elasticsearch-head]# npm run start & //前台启动,一旦关闭中断,服务也将关闭 [1] 88586 [root@node1 elasticsearch-head]# > elasticsearch-head@0.0.0 start /usr/src/elasticsearch-head > grunt server ​ Running "connect:server" (connect) task Waiting forever... Started connect web server on http://localhost:9100 //输入回车键确认

        ?查看端口号,elasticsearch-head监听端口为9100

[root@node1 elasticsearch-head]# netstat -anpt | grep 9100 tcp       0     0 0.0.0.0:9100           0.0.0.0:*               LISTEN     88599/grunt         [root@node1 elasticsearch-head]# netstat -anpt | grep 9200 tcp6       0     0 :::9200                 :::*                   LISTEN     88492/java          

查看信息

        ?通过Elasticsearch-head查看Elasticsearch信息。浏览器访问http://192.168.1.10:9100连接群集,可以看到群集健康值为绿色。单击浏览数据,可以查看索引信息,此时索引为空。

案例:ELK日志分析系统

 案例:ELK日志分析系统

插入索引

        ?通过命令插入一个测试索引,通过输出信息可以看到索引为index-demo,类型为test。

[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

        ?刷新浏览器,可以看到创建成功的索引。

案例:ELK日志分析系统

        ?选择”Overview“选项卡,还可以看到索引默认被分片成5个,且在一个副本。

 案例:ELK日志分析系统

Logstash安装及使用方法

        ?logstash一般部署在需要监控其日志的服务器中,本次案例安装在apache服务器上,用于收集apache服务器的日志信息并发送到elasticsearch中。首先在Node1上部署logstash,安装logstash前也需要java环境。

安装logstash

      ?在node1安装即可。

[root@node1 ~]# mount /dev/cdrom /media mount: /dev/sr0 is write-protected, mounting read-only [root@node1 ~]# rpm -ivh /media/logstash-5.5.1.rpm warning: /media/logstash-5.5.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY Preparing...                         [100%] Updating / installing...   1:logstash-1:5.5.1-1               [100%] Using provided startup.options file: /etc/logstash/startup.options Successfully created system startup script for Logstash [root@node1 ~]# systemctl start logstash [root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin

测试logstash

        ?命令行常用选项如下:

-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash。

-e:后面紧跟着字符串,该字符串可以被当作logstash的配置(如果是“ ”,则默认使用stdin作为输入,stdout作为输出)。

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

        ?logstash命令使用方法如下:

[root@node1 ~]# logstash   -e 'input { stdin{} } output { stdout{}}' ......//省略部分内容 The stdin plugin is now waiting for input: 13:41:27.401 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.aaa.com //键盘输入内容 2022-08-05T05:41:35.419Z node1 www.aaa.com //输出的结果 www.bbb.com //键盘输入内容 2022-08-05T05:41:39.528Z node1 www.bbb.com //输出的结果 ​ //按Ctrl+c退出 //使用rubydebug显示详细输出
[root@node1 ~]# logstash   -e 'input { stdin{} } output { stdout{ codec=>rubydebug }}' The stdin plugin is now waiting for input: 13:44:57.024 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.aaa.com //键盘输入内容 { //下列输出的结果   "@timestamp" => 2022-08-05T05:45:19.182Z,     "@version" => "1",         "host" => "node1",       "message" => "www.aaa.com" } ​ //使用logstash信息写入elasticsearch中
[root@node1 ~]# logstash   -e 'input { stdin{} } output { elasticsearch {hosts=>["192.168.1.10:9200"]}}' The stdin plugin is now waiting for input: 13:47:17.910 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.aaa.com //键盘输入内容 www.bbb.com //键盘输入内容 www.ccc.com //键盘输入内容 //结果不在标准输出显示,而是发送至elasticsearch中

        ?在Elasticsearch中查看logstash新增的索引。

案例:ELK日志分析系统

        ?查看索引对应的内容。

案例:ELK日志分析系统

logstash配置文件

        ?logstash配置文件基本由三部分组成:input、output以及filter。因此标准的配置文件格式如下:

input {…}

filter {…}

output {…}

        ?修改配置文件,让其收集系统日志/var/log/messages,并将其输出到elasticsearch中。

[root@node1 ~]# chmod o+r /var/log/messages [root@node1 ~]# ll /var/log/messages -rw----r--. 1 root root  Aug 5 13:55 /var/log/messages [root@node1 ~]# vim /etc/logstash/conf.d/system.conf input { file{ path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.1.10:9200"] index => "system-%{+YYYY.MM.dd}" } }

        ?完成后,通过浏览器查看elasticsearch的信息。

案例:ELK日志分析系统

        ?查看索引下的日志信息

案例:ELK日志分析系统

安装kibana

        ?在node1服务器安装kibana,设置开机启动。

[root@node1 ~]# rpm -ivh /media/kibana-5.5.1-x86_64.rpm warning: /media/kibana-5.5.1-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY Preparing...                         [100%] Updating / installing...   1:kibana-5.5.1-1                   [100%] [root@node1 ~]# systemctl enable kibana

        ?设置kibana的主配置文件

[root@node1 ~]# vim /etc/kibana/kibana.yml #下面配置删掉注释 server.port: 5601 //kibana端口号 server.host: "0.0.0.0" //kibana侦听的地址 elasticsearch.url: "http://192.168.1.10:9200" //和elasticsearch建立连接 kibana.index: ".kibana" //在elasticsearch中添加.kibana索引

        ?启动kibana服务

[root@node1 ~]# systemctl start kibana

        ?验证kibana,通过浏览器访问http://192.168.1.10:5601,第一次登录需要添加elasticsearch索引,添加前面创建的索引system-2022.08.05。

案例:ELK日志分析系统

        ?查看索引默认字段

案例:ELK日志分析系统

        ?单击查看“Discover”按钮查看图表信息及日志信息。

案例:ELK日志分析系统

        ?可以分类显示,“Available Fields”中的“host”,然后单击“add”按钮后,可以看到按照“host”筛选后的结果。

案例:ELK日志分析系统

Apache配置

        ?启动apache,并查看网页是否成功!将apache服务器的日志添加到elasticsearch并通过kibana显示。

[root@localhost ~]# systemctl restart httpd

        ?在apache服务器上安装logstash,以便将收集的日志发送到elasticsearch中。

[root@localhost ~]# java -version openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode) [root@localhost ~]# eject [root@localhost ~]# mount /dev/cdrom /media mount: /dev/sr0 is write-protected, mounting read-only [root@localhost ~]# rpm -ivh /media/logstash-5.5.1.rpm [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl enable logstash

        ?编写logstash配置文件。

[root@localhost ~]# cd /etc/logstash/conf.d/ [root@localhost conf.d]# vim apache_log.conf input { file{ path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning" } file{               path => "/etc/httpd/logs/error_log"               type => "error"               start_position => "beginning" } } output { if [type] == "access" {   elasticsearch { hosts => ["192.168.1.10:9200"] index => "apache_access-%{+YYYY.MM.dd}"         } } if [type] == "error" {           elasticsearch {               hosts => ["192.168.1.10:9200"]               index => "apache_error-%{+YYYY.MM.dd}"               }       } } [root@localhost conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf //执行后不要强行暂停

        ?通过浏览器访问http://192.168.1.10:9100查看索引是否创建。

 案例:ELK日志分析系统

        ?登录kibana,单击“Create index Pattern”按钮添加索引。

案例:ELK日志分析系统

        ?在索引名中输入之前配置的Output前缀“apache_error”,并单击“Create”按钮。

案例:ELK日志分析系统

        ?相同方法添加“apache_access”

案例:ELK日志分析系统

        ?选择“Discover”选项卡,在中间下拉列表中选择刚添加的”apache_access-*”索引,可以查看相应的图表及日志信息,还可以根据Fields进行归类显示。

案例:ELK日志分析系统

         ?:哇,不是吧!真的有人看完了文章!看都看完了那不得点个赞再走吗。

        ​​​​​​​        ​​​​​​​        ​​​​​​​      ​​​​​​​        ​​​​​​​    ​​​​​​​    案例:ELK日志分析系统

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224018.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:53
下一篇 2026年3月17日 下午12:53


相关推荐

  • 最新扣子(Coze)案例教程:爆款毛姆人间清醒哲学语录,Coze+Deepseek工作流,100篇头条图文秒生成,完全免费教程

    最新扣子(Coze)案例教程:爆款毛姆人间清醒哲学语录,Coze+Deepseek工作流,100篇头条图文秒生成,完全免费教程

    2026年3月12日
    2
  • Spring+Struts+Hibernate 简介(转)

    Spring+Struts+Hibernate 简介(转)

    2021年9月10日
    69
  • java编译运行cpp文件

    java编译运行cpp文件try finallongtim 3000 限制的执行时间 毫秒 Stringcmd g cpp oyour app name finallongsta System currentTimeM finalProcess Runtime getRuntime

    2026年3月16日
    1
  • 阿里巴巴主流数据库连接池Druid入门

    阿里巴巴主流数据库连接池Druid入门一.数据库连接池的必要性(一).传统数据库连接模式的的步骤1.在主程序中创建连接2.进行sql操作3.关闭数据库连接(二).传统数据库连接模式存在的问题1.浪费时间:每次连接时都要验证登录和将conn加载到内存,2.不能大规模的访问数据库:当数据库访问人数过多时,占用大量系统资源,会导致服务器崩溃3.存在内存泄漏问题:每次连接都需要断开连接,如果不断开,程序运行结束,会有创建的连接对象存在内存中一直无法关闭,就会导致java内存…

    2022年7月23日
    14
  • 长尾分布原理

    长尾分布原理一个均衡的数据集固然大大简化了对算法鲁棒性的要求 也一定程度上保障了所得模型的可靠性 但随着关注类别的逐渐增加 维持各个类别之间均衡就将带来指数增长的采集成本 长尾分布数据 就是少数类别有大部分数据 而多数类别只有小部分数据 直接利用长尾数据来训练的分类和识别系统 往往会对头部数据过拟合 从而在预测时忽略尾部的类别 如何有效的利用不均衡的长尾数据 来训练出均衡的分类器就是我们所关心的问题 从工业需求上来说 该研究也将大大地提升数据采集的速度并显著降低采集成本 常用的解决方法

    2026年3月19日
    2
  • 添加员工功能400报错

    添加员工功能400报错真的心酸,找了两个多小时的bug,各方面数据数据都比对过了,还把源码复制过来直接用,就是找不到问题一直报错400,最后发现是配置文件的问题,在添加员工日期时没有采用一致格式,需要进行配置。…

    2022年5月13日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号