目录
一、ELK 简介
filebeat 结合 logstash 带来好处
缓存/消息队列(redis、kafka、RabbitMQ等)
Fluentd
为什么要使用 ELK
二、完整日志系统基本特征
ELK 的工作原理
三、部署ELK集群部署
第一步 关闭防火墙和安全机制
第二步 给节点服务器设置地址映射关系
第三步 查看JDK是否安装
第四步 给节点服务器安装ES
第五步 加载系统服务
第六步 备份并修改配置文件
第七步 查看取消注释的行
第八步 给两个Node节点创建存放路径并授权
第九步 启动服务器并查看
第十步 用浏览器访问查看
第十一步 安装 Elasticsearch-head 插件
第十二步 编译安装Node
第十三步 安装Phantomjs框架
第十四步 安装Elasticsearch-head
第十五步 修改Elasticsearch主配置文件
第十六步 重启ES服务
第十七步 启动ES-head服务
第十八步 浏览器访问测试
第十九步 插入测试索引
第二十步 查看索引信息
第二十一步 安装Apache节点服务
第二十二步 启动HTTP服务
第二十三步 安装Java环境
第二十四步 安装并启动Logstash服务
第二十五步 加入系统识别服务
第二十六步 使用Logstash把信息写入ES当中
第二十七步 将Logstash日志写入到ES指定IP地址
第二十八步 刷新浏览器访问
第二十九步 给日志文件赋权
第三十步 编写配置文件
第三十一步 重启Logstash服务
第三十二步 再次查看刷新指定ES地址
四、ELK中部署Kibana可视化界面
第一步 在Node1节点服务器中安装部署Kibana
第二步 修改配置文件
第三步 启动Kibana服务
第四步 用浏览器访问测试
第五步 编写配置文件
第六步 执行指定文件
第七步 用浏览器访问测试
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
●ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。
Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与Elasticsearch 通信。
Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。
1秒
●Kiabana:Kibana 通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来汇总、分析和搜索重要数据。
●Logstash:作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。
Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。
相对 input(数据采集) filter(数据过滤) output(数据输出)
可以添加的其它组件
●Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进或是直接发给
Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中。行解析
① 通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力
② 从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
③ 将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
④ 使用条件数据流逻辑组成更复杂的处理管道
可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。
是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低、资源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。
在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持 UI 分析
警告:能够提供错误报告,监控机制
① 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
② Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
③ Elasticsearch 对格式化后的数据进行索引和存储。
④ Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。
Node1节点(2C/4G):node1/192.168.8.130 Elasticsearch Kibana
Node2节点(2C/4G):node2/192.168.8.140 Elasticsearch
Apache节点:Apache/192.168.8.200 Logstash Apache
命令:systemctl stop firewalld
setenforce 0
命令:echo "192.168.8.130 node1" >> /etc/hosts
echo "192.168.8.140 node2" >> /etc/hosts
命令:java -version
命令:rpm -ivh elasticsearch-5.5.0.rpm
命令:systemctl daemon-reload
systemctl enable elasticsearch.service
命令:cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
Node2节点名称与Node1不同
命令:grep -v "^#" /etc/elasticsearch/elasticsearch.yml
命令:mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
命令:systemctl start elasticsearch.service
netstat -antp | grep 9200
命令:yum -y install gcc gcc-c++ make
命令:cd /opt
tar zxvf node-v8.2.1.tar.gzcd node-v8.2.1/
./configure
make && make install
命令: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
命令:cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
命令:vim /etc/elasticsearch/elasticsearch.yml
命令:systemctl restart elasticsearch
命令:cd /usr/local/src/elasticsearch-head/
npm run start &netstat -antp | grep 9100
命令:curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
命令:yum -y install httpd
命令:systemctl start httpd
命令:yum -y install java
命令: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{ codec=>rubydebug } }'
www.baidu.com
www.sina.com.cn
命令:logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.8.130:9200"] } }'
命令:chmod 777 /var/log/messages
命令:vim /etc/logstash/conf.d/system.conf
命令:systemctl restart logstash
systemctl status logstash
命令:cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm
命令:vim /etc/kibana/kibana.yml
命令:systemctl start kibana
systemctl enable kibana
lsof -i:5601
命令:vim /etc/logstash/conf.d/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.10.13:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.10.13:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
命令:cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf