系统配置:CentOS Linux release 7.6.1810 (2核1536M,机器配置问题,容易踩很多坑,特别是低配置,jvm参数可能需要去调整,不然起不来)
ELK版本:7.10.2
elastic官网地址:https://www.elastic.co/cn/
elastic产品地址:https://www.elastic.co/cn/elastic-stack
yum源地址:https://mirrors.tuna./elasticstack/yum/
前言
日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。
简介
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页面。
常见的几种架构
1 Elasticsearch + Logstash + Kibana
这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。
2 Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。
3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如RabbitMQ) + Kibana
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。
YUM安装
(ELK安装需要以非root安装)
1. 配置JDK环境
下载jdk-17.0.2,自行下载,下载过程此处忽略
1. 安装jdk>rpm -ivh jdk-17_linux-x64_bin.rpm2. 设置环境变量>vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk-17.0.2export PATH=$JAVA_HOME/bin:$PATH3. 刷新profile>source /etc/profile.d/java.sh
2. 配置ELK yum源
>vim /etc/yum.repos.d/ELK.repo[ELK]name=ELK-Elasticstackbaseurl=https://mirrors.tuna./elasticstack/yum/elastic-7.x/gpgcheck=0enabled=1
3. 部署elasticsearch
3.1.安装elasticsearch>yum install -y elasticsearch-7.10.2
3.2.修改配置文件>vim /etc/elasticsearch/elasticsearch.ymlcluster.name: my-esnode.name: node-1path.data: /data/elk/es/datapath.logs: /data/elk/es/logsnetwork.host: 192.168.1.103http.port: 9200discovery.seed_hosts: ["zns"]cluster.initial_master_nodes: ["node-1"](备注:discovery.seed_hosts cluster.initial_master_nodes 参数需要配置下,遇到过坑,那个elasticsearch一直启动超时,排查好长时间,最后在my-es.log 日志找到:the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured 导致bootstrap checks failed 启动检查失败)
3.3.创建数据库及日志目录>mkdir -p /data/elk/es/data>mkdir -p /data/elk/es/logs3.4.修改目录权限>chown -R elasticsearch:elasticsearch /data/elk/es>chown -R elasticsearch:elasticsearch /usr/share/elastsearch
3.5.限制资源使用>vim /etc/security/limits.confelasticsearch soft memlock unlimitedelasticsearch hard memlock unlimitedelasticsearch soft nofile 65536elasticsearch hard nofile 65536
3.6.配置防火墙规则##对于elasticsearch端口,限制IP访问>firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.101" port protocol="tcp" port="9200" accept">firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.101" port protocol="tcp" port="9300" accept">firewall-cmd --reload
3.7.启动elasticsearch>systemctl restart elasticsearch.service3.8.查看端口监听>netstat -anpt3.9.查看是否已运行,若出现如下数据,则安装成功curl http://192.168.1.103:9200{"name" : "node-1","cluster_name" : "my-es","cluster_uuid" : "Pdo-m7tHTNufWxcwRkj9qQ","version" : {"number" : "7.10.2","build_flavor" : "default","build_type" : "rpm","build_hash" : "747e1cc71def077253878a59143c1f785afa92b9","build_date" : "-01-13T00:42:12.435326Z","build_snapshot" : false,"lucene_version" : "8.7.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"}
4.elasticsearch部分配置
5.elasticsearch部分配参数说明
4. 部署kibana
Kibana是node.js 编写的,不需要java环境。直接安装即可。
4.1.安装kibana>yum install -y kibana-7.10.2
4.2.修改配置文件>vim /etc/kibana/kibana.ymlserver.port: 5601server.host: "0.0.0.0"elasticsearch.hosts: ["http://192.168.1.103:9200"]kibana.index: ".kibana"logging.timezone: Asia.Shanghai
4.3.添加防火墙规则>firewall-cmd --add-port=5601/tcp --permanent>firewall-cmd --reload
4.4.启动kibana>systemctl restart kibana.service
4.5.访问kibana浏览器访问:http://192.168.1.103:5601 ,出现welcome to kibana 页面就安装成功了
5. 部署logstash
5.1.安装logstash>yum install logstash-7.10.2 -y
5.2.修改配置文件>vim /etc/logstash/logstash.ymlpath.data: /data/elk/logstash/datapipeline.ordered: autohttp.host: 0.0.0.0http.port: 9600-9700path.logs: /data/elk/logstash/logs
5.3.创建目录>mkdir -p /data/elk/logstash/{data,logs}>chown -R logstash.logstash /data/elk/logstash
5.4.增加配置(根据实际来配置)>cp /etc/logstash/logstash-sample.conf /etc/logstash/conf.d/logstash.conf>vim /etc/logstash/conf.d/logstash.confinput {beats {port => 5044}}output {elasticsearch {hosts => ["http://192.168.1.103:9200"]index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"#user => "elastic"#password => "changeme"}}
5.5.添加防火墙规则>firewall-cmd --add-port=5400/tcp --permanent>firewall-cmd --add-port=9600/tcp --permanent>firewall-cmd --reload
5.6.将logstash加入linux的service中,让其使用服务的方式运行#logstash最常见的运行方式即命令行运行./bin/logstash -f logstash.conf然后通过ctrl+c结束#修改startip.optins文件>vim /etc/logstash/startup.optionsJAVACMD=/usr/java/jdk-17.0.2/bin/javaLS_HOME=/usr/share/logstashLS_SETTINGS_DIR=/etc/logstashLS_OPTS="--path.settings ${LS_SETTINGS_DIR}"LS_JAVA_OPTS=""LS_PIDFILE=/var/run/logstash.pidLS_USER=logstashLS_GROUP=logstashLS_GC_LOG_FILE=/var/log/logstash/gc.logLS_OPEN_FILES=16384LS_NICE=19SERVICE_NAME="logstash"SERVICE_DESCRIPTION="logstash"#创建服务>/usr/share/logstash/bin/system-install#Successfully created system startup script for Logstash 表示执行成功,并会在这里创建一个配置文件/etc/systemd/system/logstash.service1)报错:Unrecognized VM option 'UseConcMarkSweepGC'处理方法:>vi jvm.options#-XX:+UseConcMarkSweepGC#-XX:CMSInitiatingOccupancyFraction=75#-XX:+UseCMSInitiatingOccupancyOnly#启动服务设置服务自启动:systemctl enable logstash启动服务:systemctl start logstash停止服务:systemctl stop logstash重启服务:systemctl restart logstash查看服务状态:systemctl status logstash>systemctl start logstash#启动报错:[ERROR] -04-03 15:54:35.501 [main] Logstash - java.lang.IllegalStateException: Logstash stopped processing because of an error: (LoadError) load error: rubygems/security -- java.lang.reflect.InaccessibleObjectException: Unable to make field private java.security.Provider java.security.MessageDigest.provider accessible: module java.base does not "opens java.security" to unnamed module @2c992252#处理方法:>export _JAVA_OPTIONS="--add-opens=java.base/java.security=ALL-UNNAMED"#systemd service方式启动时,需要在service文件额外加环境变量,(Systemd 是所有服务的父进程,/etc/profile等配置的环境变量对其无效)>vim /etc/systemd/system/logstash.service...EnvironmentFile=-/etc/logstash/logstash_jvm_env...#/etc/logstash/logstash_jvm_env内容为:>cat /etc/logstash/logstash_jvm_env_JAVA_OPTIONS="--add-opens=java.base/java.security=ALL-UNNAMED"
5.7.查看日志#默认情况下日志会保存在以下两个位置/var/log/messages
6. 部署filebeat
在需要收集日志的服务器上安装filebeat。
6.1.安装filebeat>wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-x86_64.rpm>rpm -ivh filebeat-7.10.2-x86_64.rpm
6.2.修改配置文件(enabled一定要打开,不然不会采集)>vim /etc/filebeat/filebeat.ymlfilebeat.inputs:- type: logenabled: truepaths:- /root/tmp2.txt- type: filestreamenabled: falsepaths:- /var/log/*.logfilebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falsesetup.template.settings:index.number_of_shards: 1setup.kibana:output.logstash:hosts: ["192.168.1.103:5044"]processors:- add_host_metadata:when.not.contains.tags: forwarded- add_cloud_metadata: ~- add_docker_metadata: ~- add_kubernetes_metadata: ~
6.3.启动filebeat>systemctl start filebeat启动失败:error unpacking config data: more than one namespace configured accessing 'output'这个报错的原因是,output配置了多个重复,这里是前面配置filebeat.yml 通知配置了output.elasticsearch 和output.logstash处理方法:去掉其中一个output,只保留一个output空间即可。
6.4.启动filebeat后,日志已经传到logstash,但是没有传到elasticsearch,报错了:Could not index event to Elasticsearch. 处理方法:在logstash的output配置文件里增加了这一段filter {mutate {rename => { "[host][name]" => "host" }}}然后重启logstash让其生效【备注:问题主要原因是host内包含name引起的。暂时的解决办法就是添加配置进行过滤】
7. kibana查看日志索引