irpas技术客

ELK部署+filebeat应用_qq_35502509

未知 4786

系统配置:CentOS Linux release 7.6.1810 (2核1536M,机器配置问题,容易踩很多坑,特别是低配置,jvm参数可能需要去调整,不然起不来) ELK版本:7.10.2 elastic官网地址:https://·/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.rpm 2. 设置环境变量 >vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk-17.0.2 export PATH=$JAVA_HOME/bin:$PATH 3. 刷新profile >source /etc/profile.d/java.sh

2. 配置ELK yum源

>vim /etc/yum.repos.d/ELK.repo [ELK] name=ELK-Elasticstack baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/ gpgcheck=0 enabled=1

3. 部署elasticsearch

3.1.安装elasticsearch >yum install -y elasticsearch-7.10.2 3.2.修改配置文件 >vim /etc/elasticsearch/elasticsearch.yml cluster.name: my-es node.name: node-1 path.data: /data/elk/es/data path.logs: /data/elk/es/logs network.host: 192.168.1.103 http.port: 9200 discovery.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/logs 3.4.修改目录权限 >chown -R elasticsearch:elasticsearch /data/elk/es >chown -R elasticsearch:elasticsearch /usr/share/elastsearch 3.5.限制资源使用 >vim /etc/security/limits.conf elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited elasticsearch soft nofile 65536 elasticsearch 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.service 3.8.查看端口监听 >netstat -anpt 3.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" : "2021-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部分配置

文件名说明/etc//elasticsearch/elasticsearch.yml

es的主配置文件

?/usr/share/elasticsearch/yum安装默认的家目录/etc/sysconfig/elasticsearches 启动相关的一些参数,jvm参数可以这里修改/usr/lib/systemd/system/elasticsearch.servicees 的systemctl 管理配置

? ? ? ?

5.?elasticsearch部分配参数说明

属性名说明cluster.name配置elasticsearch的集群名称。node.name节点名,es会默认随机指定一个名字,用户可自行配置。path.data设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号分隔。path.logs设置日志文件的存储路径,默认是es根目录下的logs文件夹。path.conf设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch。path.plugins设置插件的存放路径,默认是es根目录下的plugins文件夹。bootstrap.memory_lock设置为true可以锁住ES使用的内存,避免内存进行swap。network.host设置bind_host和publish_host,设置为0.0.0.0允许所有外网访问。http.port设置对外服务的http端口,默认为9200。transport.tcp.port集群结点之间通信端口,默认为9300。discovery.zen.ping.timeout设置ES自动发现节点连接超时的时间,默认为3S。? ??discovery.zen.minimum_master_nodes主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2。discovery.seed_hosts集群发现,配置该节点会与哪些候选地址进行通信,hostname,ip,ip+port,比如:[“127.0.0.1:9300”]。cluster.initial_master_nodes当你第一次启动全新的Elasticsearch集群时,会有一个集群引导(cluster bootstrapping)步骤,这个步骤会确定一个在第一次选举中投票被计数的、并且可以成为master节点的集合。在开发模式,如果没有配置 discovery settings,该步骤由节点自身自动执行。因为这种自动引导本质上是不安全的,当您在生产模式下启动一个全新的集群时,你必须显式指定那些可以成为master节点的名称或者IP地址,这些节点应该在第一次选举中计算选票数。

4. 部署kibana

Kibana是node.js 编写的,不需要java环境。直接安装即可。

4.1.安装kibana >yum install -y kibana-7.10.2 4.2.修改配置文件 >vim /etc/kibana/kibana.yml server.port: 5601 server.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.yml path.data: /data/elk/logstash/data pipeline.ordered: auto http.host: 0.0.0.0 http.port: 9600-9700 path.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.conf input { 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.options JAVACMD=/usr/java/jdk-17.0.2/bin/java LS_HOME=/usr/share/logstash LS_SETTINGS_DIR=/etc/logstash LS_OPTS="--path.settings ${LS_SETTINGS_DIR}" LS_JAVA_OPTS="" LS_PIDFILE=/var/run/logstash.pid LS_USER=logstash LS_GROUP=logstash LS_GC_LOG_FILE=/var/log/logstash/gc.log LS_OPEN_FILES=16384 LS_NICE=19 SERVICE_NAME="logstash" SERVICE_DESCRIPTION="logstash" #创建服务 >/usr/share/logstash/bin/system-install #Successfully created system startup script for Logstash 表示执行成功,并会在这里创建一个配置文件/etc/systemd/system/logstash.service 1)报错: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] 2022-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.yml filebeat.inputs: - type: log enabled: true paths: - /root/tmp2.txt - type: filestream enabled: false paths: - /var/log/*.log filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 setup.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查看日志索引

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #ELK部署filebeat应用 #系统配置CentOS #Linux #release #761810