日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。
但是日志通常都是存储在各自的服务器中。如果管理数十台服务器, 查阅日志需要依次登陆不同的服务器,查看过程就会很繁琐从而导致工作效率低下。虽然可以使用 rsyslog 服务将日志汇总。但是统计一些日志中的数据或者检索也是很麻烦的,一般使用grep、awk、wc、sort等Linux命令来统计和检索。如果对数量巨大的日志进行统计检索,人工的效率还是十分低下。
通过我们对日志进行收集、汇总到一起,完整的日志数据具有非常重要的作用:
信息查找。通过检索日志信息,查找相应的报错,可以快速的解决BUG。
数据分析。如果是截断整理格式化后的日志信息,可以进一步对日志进行数据分析和统计,可以选出头条,热点,或者爆款。
系统维护。对日志信息分析可以了解服务器的负荷和运行状态。可以针对性的对服务器进行优化。
ELK实时日志收集分析系统可以完美的解决以上问题。ELK作为一款开源软件可以免费使用,也有强大的团队和社区对它实时更新。
ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。
Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。
在elasticsearch中,所有节点的数据是均等的。
Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
Filebeat在APP Server端收集日志
Logstash处理过滤Filebeat收集过来的日志
Elasticsearch存储Logstash提供的处理之后的日志,用以检索、统计
Kibana提供web页面,将Elasticsearch的数据可视化的展示出来
配置ELK yum源
# cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo [elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md EOF
安装Elasticsearch
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch yum -y --enablerepo=elasticsearch install elasticsearch
配置JVM
# vim /etc/elasticsearch/jvm.options -Xms1g -Xmx1g
-Xms和-Xmx值根据内存大小实际情况来设置,官方建议设置最大不要超过32G
配置Elasticsearch参数
# vim /etc/elasticsearch/elasticsearch.yml #集群名称 cluster.name: my-application #节点名称 node.name: node-1 #绑定IP地址 network.host: 127.0.0.1 #配置集群配置,填写集群节点,会自动发现节点 cluster.initial_master_nodes: ["node-1"]
启动Elasticsearch
# systemctl start elasticsearch.service
9300端口用于集群通信,9200端口用于数据传输。
Elasticsearch API
- 集群状态:http://127.0.0.1:9200/_cluster/health?pretty
- 节点状态:http://127.0.0.1:9200/_nodes/process?pretty
- 分片状态:http://127.0.0.1:9200/_cat/shards
- 索引分片存储信息:http://127.0.0.1:9200/index/_shard_stores?pretty
- 索引状态:http://127.0.0.1:9200/index/_stats?pretty
- 索引元数据:http://127.0.0.1:9200/index?pretty
安装Kibana
# yum -y --enablerepo=elasticsearch install kibana
配置Kibana
vim /etc/kibana/kibana.yml server.port: 5601 server.host: "172.16.1.50" elasticsearch.hosts: ["http://127.0.0.1:9200"] logging.dest: /var/log/kibana/kibana.log # 配置kibana日志输出到哪里
启动Kibana
# systemctl start kibana.service
安装Logstash
# yum -y --enablerepo=elasticsearch install logstash
配置logstash
vim /etc/logstash/conf.d/syslog.conf input{ syslog { host => "0.0.0.0" port => "514" type => "syslog" } } output { stdout { codec => rubydebug } }
启动Logstash
# systemctl start logstash.service
配置开机启动
# systemctl enable elasticsearch.service # systemctl enable kibana.service # systemctl enable logstash.service