ELK日志分析系统
- ---三个开源工具配合使用
- ---主要用来完成用户对日志的操作,统计,统一格式化,并进性友好的web界面显示
为什么使用
- --日志集中化处理---解决集群(多台机器)错误
- ---快速定位错误,提高效率
- --可以分析错误产生的原因(软硬件和配置文件错误)
- --便于运维人员了解机器负荷和性能安全性,并及时修改
完整日志系统基本特征
收集:能够采集多种来源的日志数据 传输:能够稳定的把日志数据解析过滤并传输到存储系统 存储:存储日志数据 分析:支持 UI 分析 警告:能够提供错误报告,监控机制
ELK流程图及原理
(1). 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2). Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3). Elasticsearch 对格式化后的数据进行索引和存储。
(4). Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示
数据流向
EFLK流程图
Elasticsearch
分布式存储检索引擎,并且存储各类日志 》》》特点 1---提供了分布式多用户全文搜索 2---实时-群集-节点-索引(延迟1S)-分片和副本 3---java开发,用户可以通过web浏览器进行查询(RESTful web接口)
Logstash
主要数据收集引擎---对数据进行过滤,分析,丰富,统一化格式; 一般会存储到指定位置并发送给Elsaticesearch
-------特点---------
- --数据处理工具 RIby语言编写
- --数据传输-数据传入-过滤数据-统一化格式
- --运行在内存
--------数据分析--------
- --数据采集【input】
- --数据过滤【filter】
- --数据输出【output】
kibana
通常和E在一起部署,提供给E强大的可视化服务,主要提供图形化webUI界面 便于浏览E的日志数据(汇总,分析,搜索,重要数据)展示给用户。
------特点------
- --开源分析可视化平台
- --搜索,查看存储在E索引中的数据
- --通过图表进行高级数据分析和展示
ELK插件
一,file beat
轻量级开源日志文件数据收集器(收集日志)指定目录和日志格式
------特点------
- --轻量级开源日志文件搜集器
- --在需要采集数据的客户端安装,并指定目录和日志格式
- --和logstash配合使用,常用于EFLK架构
------filebeat结合logstash带来的好处------
1). 通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力
2)从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
3)将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
4)使用条件数据流逻辑组成更复杂的处理管道
二,缓存消息队列
- --redis-kafka,rabbitMQ
- --可以对高并发日志数据进行流量削峰,缓冲
- --保护数据不容易丢失,对架构进行应用解耦
三,fluentd
是一个流行的开源数据收集器,受到企业欢迎
------特点,相比较L------
- --是对logstash替代,常用于EFK架构---是ELK的替代方案
- --资源消耗少,性能更高,数据处理上高效可靠
------流程-------
在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。
实验
192.168.182.137 node1
192.168.182.138 node2
192.168.182.139 httpd
配置elasticearch环境
1、配置elasticsearch环境
192.168.182.137 node1
192.168.182.138 node2
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
在末行添加
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:{JRE_HOME}/lib
【部署elasticsearch软件】
####登录192.168.182.137####
1、安装elasticsearch—rpm包
上传elasticsearch-5.5.0.rpm到/opt目录下
[root@node1 ~]# cd /opt
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm
2、加载系统服务
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service
3.更改配置文件
3、更改elasticsearch主配置文件
[root@node1opt]#cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@node1 opt]# vi /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 ####不在启动的时候锁定内存(前端缓存。与IOPS-性能测试方式,每秒读写次数相关)
55/ network.host: 0.0.0.0 ####提供服务绑定的IP地址,0.0.0.0代表所有地址
59/ http.port: 9200 ####侦听端口为9200
68/ discovery.zen.ping.unicast.hosts: ["node1", "node2"] ####集群发现通过单播实现
节点名字不能一样 需要更改
4.创建数据存放路径并授权
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/ 5.启动服务 [root@node1 elasticsearch]# systemctl start elasticsearch.service
[root@node1 elasticsearch]# netstat -antp |grep 9200
安装elasticsearch
上述查看集群的方式,及其不方便,我们可以通过安装elasticsearch-head插件后,来管理集群
上传node-v8.2.1.tar.gz到/opt
###编译安装node组件依赖包##耗时比较长 47分钟
yum install gcc gcc-c++ make -y
[root@localhost opt]# cd /opt
[root@node2 opt]# tar xzvf node-v8.2.1.tar.gz
[root@node2 opt]# cd node-v8.2.1/
[root@node2 node-v8.2.1]# ./configure
[root@node2 node-v8.2.1]# make && make install
####安装phantomjs####前端框架
上传软件包到/usr/local/src/
[root@localhost node-v8.2.1]# cd /usr/local/src/
[root@localhost src]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@localhost src]# cd phantomjs-2.1.1-linux-x86_64/bin
[root@localhost bin]# cp phantomjs /usr/local/bin
###安装elasticsearch-head###数据可视化工具
[root@localhost bin]# cd /usr/local/src/
[root@localhost src]# tar xzvf elasticsearch-head.tar.gz
[root@localhost src]# cd elasticsearch-head/
[root@localhost elasticsearch-head]# npm install
#####修改主配置文件###
[root@localhost ~]# cd ~
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml ####下面配置文件,插末尾##
http.cors.enabled: true ##开启跨域访问支持,默认为false
http.cors.allow-origin: "*" ## 跨域访问允许的域名地址
[root@localhost ~]# systemctl restart elasticsearch
####启动elasticsearch-head 启动服务器####
[root@localhost ~]# cd /usr/local/src/elasticsearch-head/
[root@localhost elasticsearch-head]# npm run start & ####切换到后台运行
[root@localhost elasticsearch-head]# netstat -lnupt |grep 9100
[root@localhost elasticsearch-head]# netstat -lnupt |grep 9200
安装logstash
做一些日志搜集输出到elasticsearch中登录主机192.168.226.130
关闭防火墙关闭核心防护
1、更改主机名
hostnamectl set-hostname apache
2、安装Apahce服务(httpd)
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
3、安装Java环境
[root@apache ~]# java -version ###如果没有装 安装yum -y install java
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
4、安装logstash
上传logstash-5.5.1.rpm到/opt目录下
[root@apache ~]# cd /opt
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm ##安装logstash
[root@apache opt]# systemctl start logstash.service ##启动logstash
[root@apache opt]# systemctl enable logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ ##建立logstash软连接
6、输入采用标准输入 输出采用标准输出---登录192.168.100.43 在Apache服务器上
logstash agent
① input
② filter
③ output
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
当出现以下情况 在 logstash.yml 文件中找到 Data path 的路径(默认在安装目录的data目录下
在这里重新指定data路径或者将原data下隐藏 .lock 文件删除重启 logstash即可)
使用rubydebug显示详细输出,codec为一种编解码器
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }
【登录192.168.100.43 Apache主机 做对接配置】
###logstash配置文件###
Logstash配置文件主要由三部分组成:input、output、filter(根据需要)
[root@apache opt]# chmod o+r /var/log/messages
[root@apache opt]# ll /var/log/messages
-rw----r--. 1 root root 572555 4月 16 23:50 /var/log/messages
#配置文件中定义的是收集系统日志(system)
[root@apache opt]# vi /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.182.137:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
[root@apache opt]# systemctl restart logstash.service
在node1安装kibana
上传kibana-5.5.1-x86_64.rpm 到/usr/local/src目录
[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vi kibana.yml
2/ server.port: 5601 #### kibana打开的端口
7/ server.host: "0.0.0.0" ####kibana侦听的地址
21/ elasticsearch.url: "http://192.168.182.137:9200" ###和elasticsearch建立联系
30/ kibana.index: ".kibana" ####在elasticsearch中添加.kibana索引
[root@node1 kibana]# systemctl start kibana.service ###启动kibana服务
[root@node1 kibana]# systemctl enable kibana.service ###开机启动kibana服务
####登录192.168.100.1真机###
使用浏览器输入192.168.182.137:5601
首次登录创建一个索引 名字:system-* ##这是对接系统日志文件
Index name or pattern ###下面输入system-*
然后点最下面的出面的create 按钮创建
然后点最左上角的Discover按钮 会发现system-*信息
然后点下面的host旁边的add 会发现右面的图只有 Time 和host 选项了 这个比较友好