系统配置: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.tsinghua.edu.cn/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.tsinghua.edu.cn/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.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/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" : "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/elasticsearch es 启动相关的一些参数,jvm参数可以这里修改
/usr/lib/systemd/system/elasticsearch.service es 的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.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] 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: logenabled: truepaths:- /root/tmp2.txt
- type: filestreamenabled: falsepaths:- /var/log/*.log
filebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.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查看日志索引

ELK部署+filebeat应用相关推荐

  1. 部署ELK+Kafka+Filebeat日志收集分析系统

    ELK+Kafka+Filebeat日志系统 文章目录 ELK+Kafka+Filebeat日志系统 1.环境规划 2.部署elasticsearch集群 2.1.配置es-1节点 2.2.配置es- ...

  2. ELK部署(filebeat+kafka+logstash+elasticsearch+kibana)

    部署环境 服务器名 IP 部署服务 yhcs_1 192.168.1.200 filebeat-8.6.2.kafka_2.13-3.4.0 yhcs_2 192.168.1.210 filebeat ...

  3. 分布式实时日志分析解决方案 ELK 部署架构

    一.前言 ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats.Logstash.Elasticsearch.Kibana等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决 ...

  4. ELK 部署手册(docker版本)

    ELK 部署手册(docker版本) 说明: elasticsearch.kibana.logstash.filebeat 版本要一致,elasticsearch-head 方便通过浏览器查看elas ...

  5. 日志分析管理系统ELK+redis+filebeat搭建

    日志分析平台建设方案 1.建设原因 日志文件分散在各个应用服务器,人员需要远程登录才能查看日志,不利于服务器安全管控,加大服务器的风险 各服务器日志配置不统一,分布杂乱,需要进行规范与管理 日志文件信 ...

  6. ELK部署+Elastalert

    前言 本文是ELK部署调试文档,ELK是由kibana.elasticsearch.logstash三个软件组成的,三个人软件的作用分别是,数据展示.日志存储以及检索.日志采集. ELK的部署方式有多 ...

  7. 分布式实时日志分析解决方案ELK部署架构

    分布式实时日志分析解决方案ELK部署架构 参考文章: (1)分布式实时日志分析解决方案ELK部署架构 (2)https://www.cnblogs.com/zhangjianbin/p/7965867 ...

  8. ELK下filebeat性能调优

    filebeat作为ELK全家桶中的采集器,具备开箱即用的特点,配置非常简单.生产环境实践下来有几个值得关注的地方: 1.适当设置clean_和ignore_,防止文件重收 2.exclude_fil ...

  9. ELK+kafaka+filebeat实现系统日志收集与预警

    ELK+kafaka+filebeat实现系统日志收集与预警 总体的流程图如下 1.项目准备 添加相关依赖 <dependencies><dependency><grou ...

最新文章

  1. 标准出现问题,人工智能正在走向错误的方向
  2. 小型音乐播放器插件APlayer.js的简单使用例子
  3. mysql 常见存储过程,MYSQL存储过程
  4. lol服务器维护9月30,英雄联盟4月30日更新维护几点结束_4月30日LOL10.9版本停机维护结束时间_3DM网游...
  5. Android 抓包的一些命令 及 adb使用的一些注意事项
  6. python和docker交互_jupyter notebook 连接服务器docker中python环境
  7. jqgrid 摧毁_非个人的交流将摧毁我们
  8. fastapi 用户指南(路径参数、查询参数、请求体)
  9. 【BZOJ3524】 [Poi2014]Couriers
  10. 海德堡大学 BMCV 组(Master/Diploma/Bachelor)研究机会,生物医学图像分析方向
  11. 如何显示最近过生日的记录
  12. 五子棋(机器人随机下棋简单版本)
  13. windows字体:中文名,英文名
  14. 透视分析和即席查询区别
  15. 多声道音频指南(二)—— 前世与今生
  16. Wincc报表案例_设备运行报表
  17. printvertically Java_Print Words Vertically in JavaScript
  18. 【题解】【蓝桥杯】回文日期
  19. 零基础学习PS——#photoshop# 的167个技能!
  20. 拿什么拯救炒币上瘾的你

热门文章

  1. phpcms移动端和pc端_phpcms实现手机端与PC端双模板的方法
  2. SpringBoot——短信发送、手机验证码登录
  3. antd 日期选择范围获取指定日期的0时0分0秒或23时59分59秒
  4. Python 看代码找疑难
  5. 查询改写(Query Rewrite)方法总结
  6. linux 写入文本文件,linux cat命令可以用于将文本写入文件吗?
  7. 【精华】批量修改文件夹中的文件名
  8. MySQL--mysqld、mysql_safe、mysql.server、mysqladmin几种启动和停止服务使用说明
  9. 企业如何做好微信营销
  10. 刘韧文章修改经验共享:写作是复述的改写