ELK保姆级安装部署教程
一、ELK简介
在后台开发中,日志系统是一个很重要的系统,一个架构良好的日志系统,可以帮助开发者更清楚的了解服务器的状态和系统安全状况,从而保证服务器的稳定运行。日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。
目前,在大型的后端架构中,一个标准的数据采集方案通常被称为ELK,即ElasticSearch、Logstash和Kibana。
- Elasticsearch:分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点,可用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 使用Java 基于 Lucene 开发,是现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建的。
- Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
- Kibana:可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
当然,除了ELK,行业内还有一些轻量型数据采集方案,比如Beats、Loki。
- Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。
二、ELK常见架构
在实际使用ELK有几种常见的架构方式:
- Elasticsearch + Logstash + Kibana:这种架构,通过Logstash收集日志,Elasticsearch分析日志,然后在Kibana中展示数据。这种架构虽然是官网介绍里的方式,但是在生产中却很少使用。
- Elasticsearch + Logstash + filebeat + Kibana:与上一种架构相比,增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash)就能够收集到日志。所以在生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。
- Elasticsearch + Logstash + filebeat + redis + Kibana:此种架构是上面架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。
所以,我们此次选择Elasticsearch + Logstash + filebeat + Kibana架构来进行演示。
三、安装与部署
3.1 Elasticsearch
elasticsearch的主要作用就是全文检索、结构化检索和分析。首先,安装Docker,并创建docker网络。
docker network create -d bridge elastic
然后,拉取elasticsearch,此处使用的是8.4.3版本。
docker pull elasticsearch:8.4.3
接着,执行docker脚本。
docker run -it \-p 9200:9200 \-p 9300:9300 \--name elasticsearch \--net elastic \-e ES_JAVA_OPTS="-Xms1g -Xmx1g" \-e "discovery.type=single-node" \-e LANG=C.UTF-8 \-e LC_ALL=C.UTF-8 \elasticsearch:8.4.3
注意,第一次执行脚本不要加-d这个参数,否则看不到服务首次运行时生成的随机密码和随机enrollment token。我们需要将生成的随机密码和token保存起来,以便后面使用。
接着,创建一个Elasticsearch挂载目录,并给创建的文件夹授权。
mkdir /home/xxx/elk8.4.3/elasticsearch
sudo chown -R 1000:1000 /home/xxx/elk8.4.3/elasticsearch
接下来,我们将容器内的文件复制到主机上,涉及的命令如下。
docker cp elasticsearch:/usr/share/elasticsearch/config /home/xxx/elk8.4.3/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/data /home/xxx/elk8.4.3/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/plugins /home/xxx/elk8.4.3/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/logs /home/xxx/elk8.4.3/elasticsearch/
如果要删除容器中的内容,那么可以使用rm -f。
docker rm -f elasticsearch
然后,我们修改docker脚本,增加-v挂载目录和-d参数。
docker run -it \-d \-p 9200:9200 \-p 9300:9300 \--name elasticsearch \--net elastic \-e ES_JAVA_OPTS="-Xms1g -Xmx1g" \-e "discovery.type=single-node" \-e LANG=C.UTF-8 \-e LC_ALL=C.UTF-8 \-v /home/xxx/elk8.4.3/elasticsearch/config:/usr/share/elasticsearch/config \-v /home/xxx/elk8.4.3/elasticsearch/data:/usr/share/elasticsearch/data \-v /home/xxx/elk8.4.3/elasticsearch/plugins:/usr/share/elasticsearch/plugins \-v /home/xxx/elk8.4.3/elasticsearch/logs:/usr/share/elasticsearch/logs \elasticsearch:8.4.3
打开配置文件elasticsearch.yml,具体位于/home/xxx/elk8.4.3/elasticsearch/config/elasticsearch.yml文件中。并且需要将xpack.monitoring.collection.enabled配置设置成true,添加这个配置以后在kibana中才会显示联机状态,否则会显示脱机状态,如下图所示。
最后,我们再重启Docker容器,使上面的配置生效。
docker restart elasticsearch
接下来,我们打开https://ip:9200进行测试。其中,用户名是elastic, 密码是第一次启动时保存下来的信息中生成的密码。
3.2 Kibana
Kibana是一个可视化化平台,它能够搜索、展示存储在 Elasticsearch 中索引数据。首先,在Docker中拉取镜像。
docker pull kibana:8.4.3
接着,在docker中执行启动脚本命令。
docker run -it \-d \--restart=always \--log-driver json-file \--log-opt max-size=100m \--log-opt max-file=2 \--name kibana \-p 5601:5601 \--net elastic \kibana:8.4.3
和elasticsearch的创建过程类似,kibana需要创建挂载目录,然后给创建的文件授权。
mkdir /home/xxx/elk8.4.3/kibana
sudo chown -R 1000:1000 /home/xxx/elk8.4.3/kibana
然后,再使用下面的命令将容器内的文件复制到主机上。
docker cp kibana:/usr/share/kibana/config /home/xxx/elk8.4.3/kibana/
docker cp kibana:/usr/share/kibana/data /home/xxx/elk8.4.3/kibana/
docker cp kibana:/usr/share/kibana/plugins /home/xxx/elk8.4.3/kibana/
docker cp kibana:/usr/share/kibana/logs /home/xxx/elk8.4.3/kibana/
接下来,修改kibana.yml配置文件,配置文件的路径为/home/xxx/elk8.4.3/kibana/config/kibana.yml,主要修改的内容包括:
- i18n.locale: “zh-CN”
- elasticsearch.hosts: [‘https://172.20.0.2:9200’],将IP改成elasticsearch的docker ip,注意一定要用https
- xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: [‘https://172.20.0.2:9200’], ca_trusted_fingerprint: xxxxxxxxxx}]
如果我们要删除kibana,可以使用下面的命令:
docker rm -f kibana
然后,我们修改docker启动脚本,增加挂载目录。
docker run -it \-d \--restart=always \--log-driver json-file \--log-opt max-size=100m \--log-opt max-file=2 \--name kibana \-p 5601:5601 \--net elastic \-v /home/xxx/elk8.4.3/kibana/config:/usr/share/kibana/config \-v /home/xxx/elk8.4.3/kibana/data:/usr/share/kibana/data \-v /home/xxx/elk8.4.3/kibana/plugins:/usr/share/kibana/plugins \-v /home/xxx/elk8.4.3/kibana/logs:/usr/share/kibana/logs \kibana:8.4.3
如果我们想要查看kibana中的日志,可以使用下面的命令:
docker logs -f kibana
然后打开浏览器,输入地址:http://ip:5601,使用elastic用户的密码进行认证登录。
如果忘记token了,可以重置token进入容器执行。
/bin/elasticsearch-create-enrollment-token -s kibana --url "https://127.0.0.1:9200"
输入token以后会看到一个验证码框,验证码从kibana的日志中获取。
然后,再次输入用户名elastic,密码是第一次启动elasticsearch保存的密码就可以登录到kibana后台了。
3.3 Logstash
Logstash是数据收集处理引擎,支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。首先,我们在容器中安装logstash,注意版本号的一致性。
docker pull logstash:8.4.3
然后,在docker执行启动脚本。
docker run -it \-d \--name logstash \-p 9600:9600 \-p 5044:5044 \--net elastic \logstash:8.4.3
接着,再创建logstash挂载目录,并且给创建的文件授权。
mkdir /home/xxx/elk8.4.3/logstash
sudo chown -R 1000:1000 /home/xxx/elk8.4.3/logstash
接着,将容器内的文件复制到主机上。
docker cp logstash:/usr/share/logstash/config /home/xxx/elk8.4.3/logstash/
docker cp logstash:/usr/share/logstash/pipeline /home/xxx/elk8.4.3/logstash/
然后,我们将/home/xxx/elk8.4.3/logstash/elasticsearch/config/certs复制到/home/xxx/elk8.4.3/logstash/config/certs。
sudo cp /home/xxx/elk8.4.3/logstash/elasticsearch/config/certs /home/xxx/elk8.4.3/logstash/config/certs
修改logstash.yml的文件的默认配置,配置文件的路径为:/home/xxx/elk8.4.3/logstash/config/logstash.yml。
http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: [ "https://172.20.0.2:9200" ]
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "第一次启动elasticsearch是保存的信息中查找"
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/usr/share/logstash/config/certs/http_ca.crt"
xpack.monitoring.elasticsearch.ssl.ca_trusted_fingerprint: "第一次启动elasticsearch是保存的信息中查找"
需要注意的是,https://172.20.0.2:9200必须是https,IP是elasticsearch的docker IP。接着,再修改logstash.conf配置,目录为/home/xxx/elk8.4.3/logstash/pipeline/logstash.conf。
input {beats {port => 5044}
}filter {date {match => [ "@timestamp", "yyyy-MM-dd HH:mm:ss Z" ]}mutate {remove_field => ["@version", "agent", "cloud", "host", "input", "log", "tags", "_index", "_source", "ecs", "event"]}
}output {elasticsearch {hosts => ["https://172.20.0.2:9200"]index => "server-%{+YYYY.MM.dd}"ssl => truessl_certificate_verification => falsecacert => "/usr/share/logstash/config/certs/http_ca.crt"ca_trusted_fingerprint => "第一次启动elasticsearch是保存的信息中查找"user => "elastic"password => "第一次启动elasticsearch是保存的信息中查找"}
}
如果需要删除Docker容器中的logstash,可以使用下面的命令:
docker rm -f logstash
接着,再修改docker启动命令,加上-v挂载目录。
docker run -it \-d \--name logstash \-p 9600:9600 \-p 5044:5044 \--net elastic \-v /home/appuser/docker-images/elk8_4_3/logstash/config:/usr/share/logstash/config \-v /home/appuser/docker-images/elk8_4_3/logstash/pipeline:/usr/share/logstash/pipeline \logstash:8.4.3
3.4 filebeat
Filebeat是一个轻量级数据收集引擎,相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微,主要是为了解决logstash数据丢失的场景。首先,在Docker中安装Filebeat镜像。
docker pull elastic/filebeat:8.4.3
然后,执行docker启动脚本。
docker run -it \-d \--name filebeat \--network host \-e TZ=Asia/Shanghai \elastic/filebeat:8.4.3 \filebeat -e -c /usr/share/filebeat/filebeat.yml
接着,创建filebeat挂载目录,并给创建的文件授权。
mkdir /home/xxx/elk8.4.3/filebeat
sudo chown -R 1000:1000 /home/xxx/elk8.4.3/filebeat
然后,将容器内的文件复制到主机上。
docker cp filebeat:/usr/share/filebeat/filebeat.yml /home/xxx/elk8.4.3/filebeat/
docker cp filebeat:/usr/share/filebeat/data /home/xxx/elk8.4.3/filebeat/
docker cp filebeat:/usr/share/filebeat/logs /home/xxx/elk8.4.3/filebeat/
接着,修改filebeat.yml配置文件,目录为/home/xxx/elk8.4.3/filebeat/filebeat.yml。
filebeat.config:modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falseprocessors:- add_cloud_metadata: ~- add_docker_metadata: ~output.logstash:enabled: true# The Logstash hostshosts: ["localhost:5044"]filebeat.inputs:
- type: logenabled: truepaths:- /usr/share/filebeat/target/*/*/*.log. # 这个路径是需要收集的日志路径,是docker容器中的路径scan_frequency: 10sexclude_lines: ['HEAD']exclude_lines: ['HTTP/1.1']multiline.pattern: '^[[:space:]]+(at|.{3})\b|Exception|捕获异常'multiline.negate: falsemultiline.match: after
如果要删除容器中的Filebeat,使用如下命令。
docker rm -f filebeat
接着,修改docker启动脚本,增加-v挂载目录。
docker run -it \-d \--name filebeat \--network host \-e TZ=Asia/Shanghai \-v /home/xxx/log:/usr/share/filebeat/target \-v /home/xxx/elk8.4.3/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \-v /home/xxx/elk8.4.3/filebeat/data:/usr/share/filebeat/data \-v /home/xxx/elk8.4.3/filebeat/logs:/usr/share/filebeat/logs \elastic/filebeat:8.4.3 \filebeat -e -c /usr/share/filebeat/filebeat.yml
需要注意的是, -v /home/xxx/log:/usr/share/filebeat/target 这个是需要收集的日志目录,需要挂载到容器中。
3.5 最终效果
完成前面软件的安装后,ELK所需的软件就安装完成。接下来,我们登录kibana就可以查看信息了。
然后,我们打开索引,打开Stack Manager。如果能看到自己配置的索引说明安装配置成功。
如果还没有日志,可以先创建数据视图,然后选择创建的索引。
ELK保姆级安装部署教程相关推荐
- 直接用IDEA刷leetcode的插件--Leetcode editor (保姆级安装示例教程)
直接用IDEA刷leetcode的插件–Leetcode editor (保姆级安装示例教程) 你是否还在发愁刷 leetcode 不好debug? 你是否还在往IDEA里粘代码调试好再"C ...
- AutoGPT保姆级安装使用教程
AutoGPT实在是太火了,他的star数已经来到了恐怖的82k+,所以今天我势必要把AutoGPT最最保姆级的教程送给大家. 项目地址:https://github.com/Significant- ...
- Anaconda在哪下载?Anaconda保姆级安装下载教程
许多人不知道Anaconda怎么下载?Anaconda官方下载地址在哪?这里统一解答一下~! 可以直接从 Anaconda官网下载,但因为Anaconda的服务器在国外,所以下载速度会很慢,这里推荐使 ...
- SpringToolSuit 保姆级安装教程
SpringToolSuit 保姆级安装教程 介绍 下载 SpringToolSuite 下载 lombok.jar 下载 安装 设置 字体 开启智能提示 配置 maven 快捷键 介绍 Spring ...
- 如何安装配置JDK(保姆级完美解决教程+附百度网盘链接)
JDK种类繁多,在这里我以JDK14为例,为什么以JDK14为例呢?当然是为了破解白嫖idea2020旗舰版.^_^^_^(如果大家感兴趣,我后续会一个教程) 首先去甲骨文官方网站下载JDK1 ...
- [黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程
[黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程 鉴于网上几乎没有志强cpu安装的教程,我走了相当多的弯路,不一定适合你的cpu,但是有一些小问题的解决办法,可 ...
- Typora 保姆级安装教程
Typora 保姆级安装教程 文章目录 Typora 保姆级安装教程 下载 安装 配置 更改配置文件 base.user.css github.css 更改设置 设置图床 用法 下载 https:// ...
- 数据库管理-第八十一期 保姆级EMCC搭建教程(20230606)
数据库管理 2023-06-06 第八十一期 保姆级EMCC搭建教程 1环境说明 2 EMCC安装前准备 3安装EMCC 4 进入EMCC 5 添加主机与数据库 5.1 添加主机 5.2 添加数据库 ...
- 联想用u盘重装系统步骤_保姆级重装系统教程在此
重装系统不用愁,管家给你露一手!保姆级重装系统教程在此,请客官笑纳. 装前必读: 1. "联想原厂系统镜像"程序目前只适用联想或ThinkPad品牌的64位Win10家庭中文版电脑 ...
最新文章
- 用.NET SqlBulkCopy类执行批量复制
- Nexus安装及配置
- OpenGL Primitive Restart原始重启的实例
- 清华网红自行车火了!背后是登在《自然》上的黑科技
- java中的内存一般分成几部分?
- Nginx配置文件conf详解
- AI技术已经如此逆天了,该有时间学学AI了
- python2逐步转向python3之小程序实践学习
- 面向对象编程思想详解汇总
- 51单片机之LED点阵
- 魔兽服务器维护一般要多少时间,《魔兽世界》魔兽世界维护时间心得
- 万能检测数据类型的方法
- Java获取某年某周的第一天
- 【C语言】for循环嵌套-等式推导
- CA认证及http实现方法
- Python中Django与Echarts的结合用法
- 搜索引擎优化技巧解读
- Win32.Rootkit.Lapka.Wozw 木马病毒分析
- CPU : CPU核心类型
- 贵的键盘就一定好吗?程序员该怎样选择一款适合自己的键盘呢,来这里参考下吧