EFLK日志收集
ELK
一、什么是ELK
ELK是一套日志几种处理解决方案,包含了ElasticSearch、Logstash 和 Kibana 三个开源工具。
二、ELK组件
ElasticSearch:
- 是基于Lucene(全文检索引擎的架构)开发的分布式存储检索引擎,用来存储日志
- 是一个java开发的,可通过RESTful Web 接口,让用户通过浏览器与ElasticSearch交互
- ElasticSearch是一个实时的、分布式的可扩展搜索引擎,允许进行全文、结构化搜索,通常用于索引和搜索大容量的日志数据,也可以用于搜索许多不同类型的文档
Kiabana:
Kiabana常与ElasticSearch一起部署,Kibana可以为ElasticSearch提供图形化web界面。
Logstash:
- Logstash作为数据收集引擎它可以动态的从各种数据源搜集数据,并对数据机进行过滤、分析、统一格式等操作,然后存储到用户指定的位置,一般会发送给ElasticSearch
- 它是由Ruby语言编写,运行在java虚拟机上的一款数据处理工具,可以实现数据传输,格式处理,格式输出。
Filebeat:
是一款轻量级的开源日志数据搜索器,相对于Logstash来说,不需要安装JDK环境,对性能的占用相对较小,一般的架构是Filebeat替代了原先Logstash的职责对日志进行手机然后交付给Logstash进行解析或直接发给ES存储
Filebeat+Logstash的优点
1.通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力
2.从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
3.将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
4.使用条件数据流逻辑组成更复杂的处理管道
5.日志的集中化管理 beats 包括四种工具
三、日志集中化管理beats的四种工具
- Packetbeat(搜索网络数据流量)
- Topbeat(搜索系统、进程和文件系统级别的CPU和内存使用情况等数据)
- Filebeat(搜索文件数据)
- Winlogbeat(搜索Window时间日志数据)
四、什么是缓存/消息队列
对高并发日志数据进行流量削峰,防止大量并发直接冲击站点,而且这样的可以在一定程度上保证数据不会丢失,并对整个架构解耦。
五、ELK工作原理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MkhPew8T-1663518520739)(C:/Users/mogu/Downloads/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%20(7)].png)
AppServer集群产生的日志由Logstash收集,Logstash把收到的日志数据格式化后转存到ES数据库内,通过Kiabana查看ES数据库内索引中的数据并展示到Bower端
六、ELFK日志分析部署
实验环境配置
服务器 | 主机IP | 职责 | 环境 | 部署 |
---|---|---|---|---|
node1 | 192.168.226.123 | 作为ES数据库节点 | JDK1.8.0_342 | ElasticSearch Kibana |
node2 | 192.168.226.122 | 作为ES数据库节点 | JDK1.8.0_342 | ElasticSearch |
apache | 192.168.226.121 | 连接通道 | JDK1.8.0_342 | Logstash Apache |
filebeat | 192.168.226.124 | 数据收集 | JDK1.8.0_342 | Filebeat |
(1)配置两个ES数据库
①配置DNS本地域名解析
echo "192.168.226.123 node1" >>/etc/hosts
echo "192.168.226.122 node2" >>/etc/hosts
②安装ElasticSearch
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload && systemctl enable elasticsearch.service //刷新后台并加载系统
③修改ElasticSearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak //讲之前的配置文件做备份
vim /etc/elasticsearch/elasticsearch.yml
##17行,取消注释,指定群集名称
cluster.name: my-elk-cluster
##23行,取消注释,指定节点名称(node1节点为node1,node2节点为node2)
node.name: node1
##33行,取消注释,指定数据存放路径
path.data: /data/elk_data
##37行,取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
##43行,取消注释,不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
bootstrap.memory_lock: false
##55行,取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
##59行,取消注释,ES服务的默认监听端口为9200
http.port: 9200
##68行,取消注释,集群发现通过单播实现,指定要发现的节点node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
④检查下配置文件修改是否一致
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
⑤创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/ //给数据库对这个数据存放地点执行权限
⑥启动elasticsearch
systemctl start elasticsearch.service //这玩意启动慢等会
(2)安装Elasticsearch—head插件
①编译安装node
yum install -y gcc gcc-c++ make
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j 4 && make install
②安装phantomjs
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
③安装Elasticsearch-head数据可视化工具
cd /opt
tar -zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
④修改Elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
##末行添加以下内容
http.cors.enabled: true ##开启跨域访问支持,默认为false
http.cors.allow-origin: "*" ##指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch.service
⑤启动elasticsearch-head 服务
cd /usr/local/src/elasticsearch-head/
npm run start &
⑥插个索引测试下
[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"}'
(2)配置filebeat服务器
①安装filebeat
wget http://101.34.22.188/ELK/filebeat-6.2.4-linux-x86_64.tar.gz -P /opt
cd /opt
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64 /usr/local/filebeat
②修改filebeat配置文件
cd /usr/local/filebeat
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml
filebeat.prospectors:
##21行,指定log类型,从日志文件中读取消息
- type: log
##24行,开启日志收集功能,默认为false
enabled: true
##28行,指定监控的日志文件
- /var/log/*.log
##29行,添加收集/var/log/messages
- /var/log/messages
##31行,添加以下内容,注意格式
fields:
service_name: filebeat
log_type: log
service_id: 192.168.226.124 #指向的是本机地址,当然filebeat作为一个轻量化的只能对本地的日志收集当然就没input了
#-------------------------- Elasticsearch output ------------------------------
该区域内容全部注释
#----------------------------- Logstash output --------------------------------
##157行,取消注释
output.logstash:
##159行,取消注释,指定logstash的IP和端口号
hosts: ["192.168.223.13:5044"]
[root@filebeat filebeat]# ./filebeat -e -c filebeat.yml
#启动filebeat,-e记录到stderr并禁用syslog /文件输出,-c指定配置文件
(3)配置logstash服务器
①安装apache
hostnamectl set-hostname apache
bash
yum install -y httpd
systemctl start httpd && systemctl enable httpd
②安装JDK
yum install -y java
③安装logstach
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
logstash -e 'input { stdin{} } output { stdout{} }' //测试下
④在logstash组件上建一个logstash配置文件
cd /etc/logstash/conf.d/
vim logstash.conf
input {
beats {
port => "5044"
}
}
output {
elasticsearch {
hosts => ["192.168.226.123:9200", "192.168.226.124:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
/usr/share/logstash/bin/logstash -f logstash.conf_log.conf
(4)浏览器验证
192.168.226.123:9
=> [“192.168.226.123:9200”, “192.168.226.124:9200”]
index => “%{[fields][service_name]}-%{+YYYY.MM.dd}”
}
stdout {
codec => rubydebug
}
}
/usr/share/logstash/bin/logstash -f logstash.conf_log.conf
(4)浏览器验证
192.168.226.123:9