一、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保姆级安装部署教程相关推荐

  1. 直接用IDEA刷leetcode的插件--Leetcode editor (保姆级安装示例教程)

    直接用IDEA刷leetcode的插件–Leetcode editor (保姆级安装示例教程) 你是否还在发愁刷 leetcode 不好debug? 你是否还在往IDEA里粘代码调试好再"C ...

  2. AutoGPT保姆级安装使用教程

    AutoGPT实在是太火了,他的star数已经来到了恐怖的82k+,所以今天我势必要把AutoGPT最最保姆级的教程送给大家. 项目地址:https://github.com/Significant- ...

  3. Anaconda在哪下载?Anaconda保姆级安装下载教程

    许多人不知道Anaconda怎么下载?Anaconda官方下载地址在哪?这里统一解答一下~! 可以直接从 Anaconda官网下载,但因为Anaconda的服务器在国外,所以下载速度会很慢,这里推荐使 ...

  4. SpringToolSuit 保姆级安装教程

    SpringToolSuit 保姆级安装教程 介绍 下载 SpringToolSuite 下载 lombok.jar 下载 安装 设置 字体 开启智能提示 配置 maven 快捷键 介绍 Spring ...

  5. 如何安装配置JDK(保姆级完美解决教程+附百度网盘链接)

    JDK种类繁多,在这里我以JDK14为例,为什么以JDK14为例呢?当然是为了破解白嫖idea2020旗舰版.^_^^_^(如果大家感兴趣,我后续会一个教程)     首先去甲骨文官方网站下载JDK1 ...

  6. [黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程

    [黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程 鉴于网上几乎没有志强cpu安装的教程,我走了相当多的弯路,不一定适合你的cpu,但是有一些小问题的解决办法,可 ...

  7. Typora 保姆级安装教程

    Typora 保姆级安装教程 文章目录 Typora 保姆级安装教程 下载 安装 配置 更改配置文件 base.user.css github.css 更改设置 设置图床 用法 下载 https:// ...

  8. 数据库管理-第八十一期 保姆级EMCC搭建教程(20230606)

    数据库管理 2023-06-06 第八十一期 保姆级EMCC搭建教程 1环境说明 2 EMCC安装前准备 3安装EMCC 4 进入EMCC 5 添加主机与数据库 5.1 添加主机 5.2 添加数据库 ...

  9. 联想用u盘重装系统步骤_保姆级重装系统教程在此

    重装系统不用愁,管家给你露一手!保姆级重装系统教程在此,请客官笑纳. 装前必读: 1. "联想原厂系统镜像"程序目前只适用联想或ThinkPad品牌的64位Win10家庭中文版电脑 ...

最新文章

  1. 用.NET SqlBulkCopy类执行批量复制
  2. Nexus安装及配置
  3. OpenGL Primitive Restart原始重启的实例
  4. 清华网红自行车火了!背后是登在《自然》上的黑科技
  5. java中的内存一般分成几部分?
  6. Nginx配置文件conf详解
  7. AI技术已经如此逆天了,该有时间学学AI了
  8. python2逐步转向python3之小程序实践学习
  9. 面向对象编程思想详解汇总
  10. 51单片机之LED点阵
  11. 魔兽服务器维护一般要多少时间,《魔兽世界》魔兽世界维护时间心得
  12. 万能检测数据类型的方法
  13. Java获取某年某周的第一天
  14. 【C语言】for循环嵌套-等式推导
  15. CA认证及http实现方法
  16. Python中Django与Echarts的结合用法
  17. 搜索引擎优化技巧解读
  18. Win32.Rootkit.Lapka.Wozw 木马病毒分析
  19. CPU : CPU核心类型
  20. 贵的键盘就一定好吗?程序员该怎样选择一款适合自己的键盘呢,来这里参考下吧

热门文章

  1. hdu 2866 Special Prime
  2. 为什么android不能root,我的安卓手机为什么不能ROOT?
  3. 北京联通EPON光模块及ROS-PPPoE拨号上网配置
  4. slf4j 日志打印
  5. Mahout学习之Mahout简介、安装、配置、入门程序测试
  6. 手动部署一台Red Hat Enterprise 8服务器
  7. 企业电子学习行业调研报告 - 市场现状分析与发展前景预测
  8. winform使用皮肤控件后,加载慢、卡顿的问题
  9. SSH1和SSH2区别
  10. APW7080KAI-TRG