ELK日志分析系统
日志服务器的特点
提高安全性
集中存放日志
缺陷:对日志的分析困难
日志处理步骤
将日志进行集中化管理
将日志格式化并输出到Elasticsearch
对格式化后的数据进行索引和存储
前端数据的展示
Elasticsearch的概述
提供了一个分布式多用户能力的全文搜索引擎
端口号:9200
Elasticsearch核心概念
接近实时
集群
节点
索引:
索引(库)–》类型(表)----》文档(纪录)
分片和副本
Logstash介绍
一款强大的数据处理工具
可实现数据传输、格式处理、格式化输出
:数据输入、数据加工(如过滤,改写等)以及数据输出
端口号:5044
Logstash主要组件
shipper
lndexer
broker
search and storage
web interface
kibana介绍
一个针对Elasticsearch的开源分析及可视化平台
搜索、查看存储在Elasticsearch索引中的数据
通过各个图表进行高级数据分析及展示
端口号:5601
kibana主要功能
Elasticsearch无缝之集成
整合数据,复杂数据分析
让更多团队成员收益
接口拱火,分享更容易
配置简单,可视化多数据源
简单数据导出
ELK简介
是一套完整的日志集中处理解决方案,将上面三种开源工具配置使用
ELK的应用场景
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
日志系统基本特性
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储目志数据
分析:支持UI分析
警告:能够提供错误报告,监控机制
ELK工作原理
(1)在所有需要收集日志的服务器上部署logstash,或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署Logstash 。
(2 ) Logstash 收集日志,将日志格式化并输出到Elasticsearch 群集中。
(3 ) Elasticsearch对格式化后的数据进行索引和存储。
( 4 ) Kibana从 ES群集中查询数据生成图表,并进行前端数据的展示。
logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。
ES集群部署实验
1.准备两台虚拟机并修改主机名,配置域名解析
node1节点:192.168.116.13
node2节点:192.168.116.11
[root@node1 ~]# vim /etc/hosts #配置域名解析
192.168.116.13 node1
192.168.116.11 node2
2.部署es软件包,修改配置文件
将软件包放入opt目录,开始解压
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm
加载服务并设置开机自启
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
修改配置文件
[root@node1 opt]# vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-elk-cluster #取消注释并指定集群名字
23 node.name: node1 #取消注释,指定节点名
33 path.data: /data/elk_data #取消注释,指定数据存放路径
37 path.logs: /var/log/elasticsearch/ #取消注释,指定日志存放路径
43 bootstrap.memory_lock: false #取消注释,改为不锁定内存
55 network.host: 0.0.0.0 #取消注释,设置监听所有地址
59 http.port: 9200 #取消注释,设置默认监听端口
68 discovery.zen.ping.unicast.hosts: ["host1", "host2"] #取消注释
3.创建数据存放路径并授权,启动服务并查看节点信息
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/
[root@node1 opt]# systemctl start elasticsearch.service
[root@node1 opt]# netstat -antp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 106925/java #服务已开启
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S9NY3GQl-1691315122113)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230803091047567.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sX4PoFSB-1691315122114)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230803091225221.png)]
Elasticsearch-head 插件部署
1.编译安装node
安装环境
[root@node1 opt]# yum install gcc gcc-c++ make -y
解压并编译
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
2.安装 phantomjs(前端的框架)
上传软件包到opt
[root@node1 node-v8.2.1]# cd /opt
解压缩并安装
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 elasticsearch-head]# npm install
3.修改es配置文件并开启服务
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
在末尾添加两行
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@node1 elasticsearch-head]# systemctl restart elasticsearch
4.启动服务
[root@node1 elasticsearch-head]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &
查看端口是否开启
[root@node1 elasticsearch-head]# netstat -natp |grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 23136/grunt
tcp 0 0 127.0.0.1:47712 127.0.0.1:9100 TIME_WAIT -
5.通过 Elasticsearch-head 查看 Elasticsearch 信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akfPQkVJ-1691315122114)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230803094359542.png)]
6.插入索引并测试
[root@node1 elasticsearch-head]# curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : true
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wVbC4YWz-1691315122114)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230803094606093.png)]
削峰:
按照优先级一次发送给另一端,消息代理会把数据放在内部
然后他去通过优先级,发送给logstash,举例 logstash他只能一次处理100个任务,但是现在又1000个任务,所以中间件(消息)先给他100个任务,最后数据会一点点给logstash最终保证logstash 压力平稳
②接口调用
可能对接接口规范不一致导致不兼容现象,所以这里使用消息代理去让两个接口兼容