IT评测·应用市场-qidao123.com技术社区

标题: ELK企业级日记分析 [打印本页]

作者: 熊熊出没    时间: 2024-7-22 19:46
标题: ELK企业级日记分析
目   录


一、ELK简介
1.1 elasticsearch简介
1.2 logstash简介
1.3 kibana简介
1.4 ELK的好处
1.5 ELK的工作原理
二、部署ELK
2.1 部署elasticsearch(集群)
2.1.1 修改配置文件
2.1.2 修改系统参数
2.1.2.1 修改systemmd服务管理器
2.1.2.2 性能调优参数
2.1.2.3 修改内核参数
2.1.3 重启系统,开启elasticsearch服务
2.1.4 欣赏器中插件elasticsearch
2.2 部署logstash
2.3 部署kibana图形化工具
三、管理nginx日记
四、管理tomcat日记


一、ELK简介

ELK是由elasticsearch+logstash+kibana三个开源软件的组成的一个组合体,对收集、分析和展示的企业级解决方案,主要优点有:
处置处罚机动:elasticsearch是及时全文索引,具有强大的搜索功能配置相对简单,API接口使用json接口,logstash使用模块配置,kibana的配置文件部分更简单。
检索性能高效:基于优秀的设计,固然每次查询都是及时,但是也可以达到百万亿级数据的查询秒级相应。集群线性扩展:elasticsearch和logstash都可以机动线性扩展。
前端利用壮丽:kibana的前端设计比较壮丽,而且利用简单。
1.1 elasticsearch简介

elasticsearch是一个高度可扩展性的开源全文索引和分析引擎,它可实现数据的及时全文搜索。
搜索、支持分布式可实现高可用、提供API接口,可以处置处罚大规模日记数据,比如nginx,tomcat,系统日记等功能。
使用java语言开辟,建立在全文搜索引擎Apache lucene基础之上的搜索引擎
特点:
   及时搜索、及时分析
  分布式架构、及时文件存储
  文档导向,全部对象都是文档
  高可用,易扩展,支持集群,分片与分配
  接口友爱,支持json
  1.2 logstash简介

Logstash 是一个具有及时传输能力的数据收集引擎,其可以通过插件实现日记收集和转发,支持日记过滤,支持普通 log、自界说 json 格式的日记解析,最终把经过处置处罚的日记发送给 elasticsearch。
1.3 kibana简介

Kibana 为 elasticsearch 提 供 一 个 查 看 数 据 的 web 界 面 , 其 主 要 是 通 过elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。
1.4 ELK的好处

ELK组件在大数据运维系统中,主要可解决的问题:
   日记查询,问题排查,故障恢复,故障自愈
  应用日记分析,错误报警
  性能分析,用户行为分析
  1.5 ELK的工作原理

(1)在全部必要收集日记的服务器上部署logstash,大概先将日记进行会合化管理在日记服务器上,在日记服务器上部署logstash。
(2)logstash收集日记,将日记格式化并输出到elasticsearch聚会合。
(3)elasticsearch对格式化后的数据进行索引和存储
(4)kibana从ES聚会合查询数据生成图表,并进行前端数据的展示。
总结:logstash作为日记搜集器,从数据源收罗数据,并对数据进行过滤,格式化处置处罚,然后交给elasticsearch存储,kibana对日记进行可视化处置处罚。
二、部署ELK

全部的服务器配置,全部服务器不低于4G内存
服务器情况角色:三台机子
   7-1(Node1)和7-2(Node2)作为elasticsearch存储数据。集群
  7-3Node3作为收集日记服务器。
  
Node1:192.168.114.10
  Node2:192.168.114.20
  Node3:192.168.114.30
  前期准备:
   systemctl stop firewalld
  setenforce 0
  都必要java情况,先安装java:
   yum install -y java
  

创建存放源码包的目次:
   mkdir /data ; cd /data
  2.1 部署elasticsearch(集群)

两台服务器配置一致,后面只必要修改一个地方,名字不同。
以下没有指定阐明,主机Node2也同样的利用。
准备rpm包,拖进来。
  1. [root@Node1 data]#:ls
  2. elasticsearch-6.7.2.rpm
复制代码
解压:rpm -ivh elasticsearch-6.7.2.rpm
  1. [root@Node1 data]#:rpm -ivh elasticsearch-6.7.2.rpm
复制代码
2.1.1 修改配置文件

进入配置文件的路径,修改配置文件,先备份
  1. [root@Node1 data]#:cd /etc/elasticsearch/
  2. [root@Node1 elasticsearch]#:cp -a elasticsearch.yml elasticsearch.yml.bak
  3. [root@Node1 elasticsearch]#:vim elasticsearch.ym
  4. #做出以下修改,前面数字是行号。
  5. 17:cluster.name: my-elk-cluster
  6. 23:node.name: node1
  7. 24:node.master: true
  8. 25:node.data: true
  9. 35:path.data: /var/lib/elasticsearch
  10. 39:path.logs: /var/log/elasticsearch
  11. 45:bootstrap.memory_lock: true
  12. 57:network.host: 0.0.0.0
  13. 61:http.port: 9200
  14. 62:transport.tcp.port: 9300    #手动添加,集群,主机之间通过9300端口相连
  15. 71:discovery.zen.ping.unicast.hosts: ["192.168.114.10:9300", "192.168.114.20:9300"]  #集群的IP地址,Node1和Node2的IP
复制代码
过滤出看下修改的地方:

在这个配置文件中,第23行,名字不能一样,这个配置文件,可以远程拷贝到Node2

修改Node2的node.name名字为node2

2.1.2 修改系统参数

2.1.2.1 修改systemmd服务管理器

/etc/systemd/system.conf文件用于配置systemd的,这是一种用于linux利用系统的系统和服务管理器。通过这个文件,你可以自界说与系统利用、性能和行为相关的各种设置。在末了添加配置项:
   DefaultLimitNOFILE=65536                #设置打开文件数目标默认限制
DefaultLimitNPROC=32000                #设置历程数目标默认限制
DefaultLimitMEMLOCK=infinity           #内存锁
  1. [root@Node1 elasticsearch]#:vim /etc/systemd/system.conf
  2. ......
  3. DefaultLimitNOFILE=65536
  4. DefaultLimitNPROC=32000
  5. DefaultLimitMEMLOCK=infinity
复制代码
2.1.2.2 性能调优参数

末了添加
  1. [root@Node1 elasticsearch]#:vim /etc/security/limits.conf
  2. ......
  3. *  soft    nofile          65536
  4. *  hard    nofile          65536
  5. *  soft    nproc           32000
  6. *  hard    nproc           32000
  7. *  soft    memlock         unlimited
  8. *  hard    memlock         unlimited
复制代码

2.1.2.3 修改内核参数

一个历程可以拥有的最大内存映射区域数。(分配:2g/262144,4g/4194304,8g/8388608)
  1. [root@Node1 elasticsearch]#:vim /etc/sysctl.conf
  2. ......
  3. vm.max_map_count=262144
  4. [root@Node1 elasticsearch]#:sysctl -p
  5. vm.max_map_count = 262144
复制代码
2.1.3 重启系统,开启elasticsearch服务

reboot
重启后别忘记防火墙和焦点防护
   systemctl stop firewalld
  setenforce 0
   开启服务:
  1. [root@Node2 ~]#:systemctl start elasticsearch.service
  2. [root@Node2 ~]#:systemctl status elasticsearch.service
  3. ● elasticsearch.service - Elasticsearch
  4.    Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled)
  5.    Active: active (running) since 三 2024-07-17 17:01:10 CST; 4s ago
  6.      Docs: http://www.elastic.co
  7. Main PID: 3165 (java)
  8.     Tasks: 17
  9.    CGroup: /system.slice/elasticsearch.service
  10.            └─3165 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFrac...
  11. 7月 17 17:01:10 Node2 systemd[1]: Started Elasticsearch.
复制代码
查看端口号:

9300是集群中与另一台Node2连接的端口。Node2上同理:

如许服务就起来了,elasticsearch集群。
去主机查看节点状态
   192.168.114.10:9200
  192.168.114.20:9200
  

查看聚集的康健情况,可以看到status值为green(绿色),表示节点康健运行
   192.168.114.10:9200/_cluster/health?pretty
192.168.114.20:9200/_cluster/health?pretty
  

2.1.4 欣赏器中插件elasticsearch

在谷歌欣赏器中下载插件,也可以在其他欣赏器上找插件。
插件下载:点击谷歌欣赏器右上角三个点(更多)->找到扩展程序,找到管理扩展程序->在搜索栏中搜索elasticsearch。点击下载。
下载好,在右上角点击插件,可以或许看到我们下载的插件,Multi Elasticsearch Head。
点击。

打开插件后,点击new,在弹出的数据框中数据http://192.168.114.10:9200
点击确定。

 可以看到集群康健值为green。有两个节点,我们自界说的名字。

这个插件如果装不起来,也可以在本机默认欣赏器试试这个地址下载插件:https://www.chajianxw.com/
2.2 部署logstash

logstash是部署在应用服务器Node3上的,用于手机日记文件
准备源码包:
  1. [root@Node3 data]#:ls
  2. kibana-6.7.2-x86_64.rpm  logstash-6.7.2.rpm
复制代码
解压logstash:
  1. [root@Node3 data]#:rpm -ivh logstash-6.7.2.rpm
复制代码
启动服务:
  1. [root@Node3 data]#:systemctl start logstash.service
  2. [root@Node3 data]#:systemctl status logstash.service
  3. ● logstash.service - logstash
  4.    Loaded: loaded (/etc/systemd/system/logstash.service; disabled; vendor preset: disabled)
  5.    Active: active (running) since 三 2024-07-17 18:21:36 CST; 6s ago
  6. Main PID: 7425 (java)
  7.     Tasks: 17
  8.    CGroup: /system.slice/logstash.service
  9.            └─7425 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFrac...
  10. 7月 17 18:21:36 Node3 systemd[1]: Started logstash.
复制代码
为了可以或许补全logstash命令,做个软链接:
  1. [root@Node3 data]#:ln -s /usr/share/logstash/bin/logstash /usr/bin
复制代码
可以直接logstash命令执行了,不消再绝对路径了
logstash命令选项:
   -f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作Logstash的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
  可以本地测试一下,标准输入标准输出:logstash -e 'input { stdin{} } output { stdout {} }'
  1. [root@Node3 data]#:logstash -e 'input { stdin{} } output { stdout {} }'
  2. ......
  3. [INFO ] 2024-07-17 18:27:54.353 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
  4. [INFO ] 2024-07-17 18:27:54.806 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
  5. #此处输入
复制代码
由于是本地输入输出并不会在插件上显示。 看到successfully

ctrl + C退出。
如果想要使用logstash将信息写入elasticsearch中,必要执行elasticsearch块,指定主机。
  1. [root@Node3 data]#:logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.114.10:9200"] } }'
  2. ......
  3. [INFO ] 2024-07-17 18:33:39.014 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
  4. [INFO ] 2024-07-17 18:33:39.610 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
  5. #输入内容
复制代码
这里输入内容并不会向上面那样,因为我们指定了output是elasticsearch插件中,并指定了输出的主机为192.168.114.10。

我们去谷歌欣赏器革新一下:在概览中发现多了一项。

那么怎么查看我们输入的内容呢?上面一栏中有个数据欣赏,点击。

有个索引为logstash,后跟日期,是以json格式显示出来的,能显着在message键中看到值为hello world!!!的内容。
除此之外!一样平常都是用配置文件,来输入输出内容。
进入配置文件:
  1. [root@Node3 data]#:cd /etc/logstash/conf.d/
  2. [root@Node3 conf.d]#:ls
  3. [root@Node3 conf.d]#:
复制代码
创建一个系统日记的配置文件。固定格式
  1. [root@Node3 conf.d]#:vim system-log.conf
  2. input {
  3.         file {
  4.                 path => "/var/log/messages"
  5.                 type => "system"
  6.                 start_position => "beginning"
  7.         }
  8. }
  9. output {
  10.         elasticsearch {
  11.                 hosts => [ "192.168.114.10:9200","192.168.114.20:9200"]
  12.                 index => "system-%{+YYYY.MM.dd}"
  13.         }
  14. }
复制代码
  input指定本地的输入文件,path路径,tpye类型,start_position从当前开始。output输出到哪里,elasticsearch插件,hosts集群中的IP地址,index索引输出的格式
  但是我们path路径下的messages这个日记文件要具有读的权限。

启动logstash:logstash -f system-log.conf
  1. [root@Node3 conf.d]#:logstash -f system-log.conf
  2. WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
  3. ......
  4. [INFO ] 2024-07-17 18:50:09.998 [[main]<file] observingtail - START, creating Discoverer, Watch with file and sincedb collections
  5. [INFO ] 2024-07-17 18:50:10.386 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9601}
复制代码
看到successfully乐成后,去欣赏器上查看。

我们指定的索引名字,systemctl+日期。年.月.日
我们的配置文件中指定了格式:index => "system-%{+YYYY.MM.dd}"
查看数据欣赏:在右侧可以或许看到/var/log/messages文件中的全部日记信息。

这里太多了,于是就又出现了一个图形化界面的工具。kibana

2.3 部署kibana图形化工具

解压kibana,进入配置文件。
  1. [root@Node3 data]#:rpm -ivh kibana-6.7.2-x86_64.rpm
  2. 警告:kibana-6.7.2-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
  3. 准备中...                          ################################# [100%]
  4. 正在升级/安装...
  5.    1:kibana-6.7.2-1                   ################################# [100%]
  6. [root@Node3 data]#:cd /etc/kibana/
  7. [root@Node3 kibana]#:ls
  8. kibana.yml
复制代码
修改配置文件,先做个备份。
修改以下配置项。
  1. [root@Node3 kibana]#:cp -a kibana.yml kibana.yml.bak
  2. [root@Node3 kibana]#:vim kibana.yml
  3. server.port: 5601
  4. server.host: "0.0.0.0"
  5. elasticsearch.hosts: ["http://192.168.114.10:9200","http://192.168.114.20:9200"]
  6. kibana.index: ".kibana"
  7. logging.dest: /var/log/kibn.log
  8. i18n.locale: "zh-CN"
复制代码
查看修改了哪些,在第几行。
   -v反选:过滤注释行和空行。反选了,除此之外的行
  -n显示行号
  -E开启扩展正则表达式
  [root@Node3 kibana]#:grep -vnE "^#|^$" kibana.yml
2:server.port: 5601                        #第2行,打开端口
7:server.host: "0.0.0.0"                       #第7行,监听地址
28:elasticsearch.hosts: ["http://192.168.114.10:9200","http://192.168.114.20:9200"]        #集群服务器
37:kibana.index: ".kibana"                #打开索引
96:logging.dest: /var/log/kibn.log        #指定日记文件,这个日记文件必要手动创建
113:i18n.locale: "zh-CN"                #中文设置
  创建日记,修改属主属组,启动服务,查看状态。

看端口:是起来的

图形化工具安装乐成。在欣赏器输入:
192.168.114.30:5601
使用:
点击本身欣赏

点discover:

 乐成,搜索到一个索引。点下一步

 按时序排序,点创建索引模式

 看到一个索引。

 查看索引。

 查看我们所必要的字段。

三、管理nginx日记

在Node3上安装nginx服务。
安装epel源和nginx。
  1. [root@Node3 kibana]#:yum install -y epel-release.noarch
  2. [root@Node3 kibana]#:yum install -y nginx
复制代码
修改日记格式为json格式。
把本来的日记格式注释,添加自界说的格式:json格式
  1. http {
  2. log_format access_json '{"@timestamp":"$time_iso8601",'
  3. '"host":"$server_addr",'
  4. '"clientip":"$remote_addr",'
  5. '"size":$body_bytes_sent,'
  6. '"responsetime":$request_time,'
  7. '"upstreamtime":"$upstream_response_time",'
  8. '"upstreamhost":"$upstream_addr",'
  9. '"http_host":"$host",'
  10. '"url":"$uri",'
  11. '"domain":"$host",'
  12. '"xff":"$http_x_forwarded_for",'
  13. '"referer":"$http_referer",'
  14. '"status":"$status"}';
  15. access_log  /var/log/nginx/access.log  access_json;
  16. ......
  17. }
复制代码

启动nginx:
  1. [root@Node3 kibana]#:systemctl start nginx
复制代码
使用其他主机访问nginx:
  1. [root@Node4 ~]#:curl 192.168.114.30
复制代码
在Node3上查看日记:

日记为json格式了。接下来做logstash。
修改logstash配置文件。
  1. [root@Node3 kibana]#:cd /etc/logstash/conf.d/
  2. [root@Node3 conf.d]#:ls
  3. system-log.conf
  4. [root@Node3 conf.d]#:vim nginx-log.conf
  5. input {
  6.         file {
  7.                 path => "/var/log/nginx/access.log"
  8.                 type => "nginx"
  9.                 start_position => "beginning"
  10.                 stat_interval => "3"
  11.                 codec => "json"
  12.         }
  13. }
  14. output {
  15.         elasticsearch {
  16.                 hosts => ["192.168.114.10:9200","192.168.114.20:9200"]
  17.                 index => "nginx-log-%{+YYYY.MM.dd}"
  18.         }
  19. }
复制代码
解释:
   stat_interval指定每三秒革新一次
  codec指定json格式
  这个日记文件要具有读的权限:

执行logstash。看到successfully
  1. [root@Node3 conf.d]#:logstash -f nginx-log.conf
  2. ......
  3. [INFO ] 2024-07-17 22:24:14.244 [[main]<file] observingtail - START, creating Discoverer, Watch with file and sincedb collections
  4. [INFO ] 2024-07-17 22:24:14.564 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9601}
复制代码
然后去欣赏器革新页面能看到索引为nginx-log-[时间]

也可以在kibana图形化页面添加索引:

第二步就是选择时序:

创建好之后,点击discover,可以看到日记:

我们添加一个字段,查看状态;

用Node2:192.168.114.20访问nginx:故意访问一个错误页面

革新一下,查看状态。

下面的tomcat也一样:
四、管理tomcat日记

tomcat的安装略。我这里直接跑脚本了。

同理,tomcat先去修改脚本格式,改为json格式。修改末了一行。
  1. [root@Node3 data]#:cd /usr/local/tomcat/conf/
  2. [root@Node3 conf]#:vim server.xml
  3. ......
  4. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  5.                prefix="tomcat_access_log" suffix=".log"
  6.                pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}" />
复制代码
  directory存放目次可以不改
  prefix改成tomcat开头
  suffix改成log末端
  

重启:
  1. [root@Node3 conf]#:systemctl restart tomcat.service
  2. [root@Node3 conf]#:ss -natp | grep 8080
  3. LISTEN     0      100       [::]:8080                  [::]:*                   users:(("java",pid=6484,fd=56))
复制代码
重启后有了配置文件:

使用另一台访问tomcat:curl 192.168.114.30:8080

 故意访问错误页面

查看一下日记:

修改配置文件:
  1. [root@Node3 logs]#:cd /etc/logstash/conf.d/
  2. [root@Node3 conf.d]#:vim tomcat_access_log.conf
  3. input {
  4.         file {
  5.         path => "/usr/local/tomcat/logs/tomcat_access_log.*.log"
  6.         type => "tomcat-acceslog"
  7.         start_position => "beginning"
  8.         stat_interval => "3"
  9.         codec => "json"
  10.         }
  11. }
  12. output {
  13.         elasticsearch {
  14.                 hosts => ["192.168.114.10:9200","192.168.114.20:9200"]
  15.                 index => "tomcat-access-log-%{+YYYY.MM.dd}"
  16.         }
  17. }
复制代码
启动logstash:
  1. [root@Node3 conf.d]#:logstash -f tomcat_access_log.conf
  2. ......
  3. [INFO ] 2024-07-17 23:37:04.297 [[main]<file] observingtail - START, creating Discoverer, Watch with file and sincedb collections
  4. [INFO ] 2024-07-17 23:37:04.618 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9601}
复制代码
去页面革新:

去图形化界面:
同样方式,去管理创建索引。tomcat关键字
去discover查看:

与nginx查询字段同理,添加字段。

可以根据需求,选择相应的字段。查看日记。

---end---

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4