ELK日志分析及操作步骤:
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景 中,此方法效率低下,面临问题包括日志量太大如何归档、文本 搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所 有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在 不同的服务器上,问题出现时,大部分情况需要根据问题暴露的 关键信息,定位到具体的服务器和服务模块,构建一套集中式日 志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 警告-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合 使用,完美衔接,高效的满足了很多场合的应用。目前主流的一 种日志系统。
ELK的核心套件:
ElasticSearch是实时全文搜索和分析引擎,提供搜集、分析、存 储数据三大功能;是一套开放REST和JAVA API等结构提供高效 搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜 索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几 乎任何类型的日志,包括系统日志、错误日志和自定义应用程序 日志。它可以从许多来源接收日志,这些来源包括 syslog、消 息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数 据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化 存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch 的REST接口来检索数据,不仅允许用户创建他们自己的数据的 定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
filebeat | 会给服务器logstash传日志 |
logstash | 负责日志收集、过滤、存储日志 |
elasticsearch | 负责搜索处理 |
kibana | 提供web界面展现 |
ELK的搭建:
0、环境构建
logstash # 负责日志收集、过滤、存储日志
elasticsearch # 负责搜索处理
kibana # 提供web界面展现
@1 192.168.99.101
@2 192.168.99.102
@1 192.168.99.104
1、安装elasticsearch及其配置
#elasticsearch需要java的运行环境,需要安装jdk
yum -y install jdk
JDK是 Java 语言的软件开发工具包,它包含了JAVA的运行环境(JVM+Java系统类)
库)和JAVA工具。
java -version #查看java版本 yum -y install elasticsearch vim /etc/elasticsearch/elasticsearch.yml
注:内存不充足时:
bootstrap.memory_lock: false #把true改成false去掉注释,(开机锁定部分专属内存,配置内存使用交换分区) http.port: 9200 #监听端口,去掉注释
systemctl enable elasticsearch systemctl start elasticsearch firewall-cmd --add-port=9200/tcp firewall-cmd --add-port=9200/tcp --permanent netstat -anp | grep 9200
2、安装 logstash
yum -y install logstash systemctl start logstash systemctl enable logstash
3、安装kibana
# 提供web界面展现
yum -y install kibana vim /etc/kibana/kibana.yml ######################## server.port: 5601 #访问端口,去掉注释 server.host: "0.0.0.0" #访问主机,去掉注释 elasticsearch.url: "http://localhost:9200" #本机访问端口,去掉注释 ############################ systemctl restart kibana systemctl enable kibana firewall-cmd --add-port=5601/tcp firewall-cmd --add-port=5601/tcp --permanent netstat -anp | grep 5601
4、安装filebeat
logstash收集日志没有filebeat方便
yum -y install filebeat vim /etc/filebeat/filebeat.yml ############################## - /var/log/*/*.log #其他软件的日志 - /var/log/messages #系统日志 因为Linux软件日志有自己的目录,所以/*/*.log paths: elasticsearch: #注释掉 hosts:["localhost:9200"] #注释掉 logstash: # 取消注释 hosts:["localhost:5044"] #取消注释 ############################# systemctl enable filebeat systemctl start filebeat firewall-cmd --add-port=5044/tcp firewall-cmd --add-port=5044/tcp --permanent
5、编辑logstash
cd /etc/logstash/conf.d vim 随便.conf ####################### #监听5044端口作为输入 input { beats { port => "5044" } } #数据过滤 filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } geoip { source => "clientip" } } #输出配置为本机的9200端口,即ElasticSerach服务的监听端口。 output { elasticsearch { hosts => ["127.0.0.1:9200"] #ElasticSerach地址/端口 index => "1906-h104-%{+YYYY.MM.dd}" #输出的文件名称 } } ################################# systemctl restart logstash
6、加密(此时任何人都能访问)
暂时完成效果图:
此时任何人都能访问,所以需要加密:
yum -y install nginx vim /etc/kibana/kibana.yml ######################## server.host: "localhost" #只允许主机访问,去掉注释 server.host: "0.0.0.0" #任何主机都能访问,注释掉 ######################## vim /etc/nginx/nginx.conf sed -i '38,88d' /etc/nginx/nginx.conf vim /etc/nginx/conf.d/elk(随便).conf ######################## server { listen 8081; auth_basic "Restricted Access"; #验证方式 auth_basic_user_file /etc/nginx/.kibana-user; #验证文件(隐藏文件) location / { proxy_pass http://127.0.0.1:5601; } } #################### #生成文件需要htpasswd yum -y install httpd htpasswd -c /etc/nginx/.kibana-user elk ### 123 123 ### nginx -t systemctl enable nginx systemctl restart nginx firewall-cmd --add-port=80/tcp firewall-cmd --add-port=80/tcp --permanent
@2 192.168.99.105
setenforce 0 yum -y install jdk yum -y install logstash filebeat (安装之前必须检查是否有Java环境,如果已经安装报错,需要卸载重新安装) cd /etc//filebeat/ scp 192.168.59.104:$PWD/filebeat.yml ./ cd /etc/logstash/conf.d scp 192.168.59.104:$PWD/* ./ vim 随便.conf ####################### 修改: hosts => ["192.168.59.105:9200"] index => "1906-h105-%{+YYYY.MM.dd}" ################################# systemctl restart logstash
@1 192.168.99.104
vim /etc/elasticsearch/elasticsearch.yml ############## network.host 0.0.0.0(192.168.59.0) #加入监听其他主机(全部/网段) ############## systemctl restart elasticsearch firewall-cmd --add-port=9200/tcp firewall-cmd --add-port=9200/tcp --permanent