基于Docker搭建ELK(Elasticsearch、Logstash、Kibana)日志框架

一、引言

随着企业业务的不断增长,日志管理成为了系统运维中不可或缺的一部分。ELK(Elasticsearch、Logstash、Kibana)作为一套开源的日志管理系统,以其高效、灵活、可扩展的特性,成为了众多企业的首选。本文将详细介绍如何搭建一套完整的ELK日志管理系统。

二、环境准备

  1. 准备至少一台Linux服务器(或者虚拟机),用于部署ELK组件。
  2. 确保服务器有足够的磁盘空间和网络带宽。
  3. 确保服务器已经安装好docker容器

三、Elasticsearch部署

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。

1. 版本选择

类型/版本 6.x 7.x 8.x 建议
Licence Apache 2.0 7.0~7.10 Apache 2.07.11++ SSPL SSPL 建议选择更友好的Apache2.0版本,SSPL协议对于想要让ES做为PAAS对外提供服务的话,将会面临es厂商的限制
云厂商支持程度 腾讯、阿里云均支持,华为不支持 腾讯云最高版 7.10.x阿里云7.10.x,7.16.x华为云7.6.x,7.10.x 均不支持 各云厂商也主要在推广7.x版本,稳定性及占用率更高
发版时间 2016 2019 2021 建议选择7.x版本,经历将近4年,稳定性已经经过验证,6.x和8.x一个太老一个太新
特性差异 / 集群配置简化,master选举进行了优化,能够避免集群脑裂Q问题;索引创建只 已经去除了type,更加简化;索引查询算法升级,查询性能有优化;提供安全策略;Kibana更轻量化,更易用; ES API进行了升级方便后续升级使用更加安全,es默认开启了一些安全功能;新的搜索API特性比如支持NLP等; 7.x基本也能满足目前需求,稳定性也更有保障
SpringBoot兼容 2.1~2.2版本对6.x支持 2.3~2.7版本对7.x支持 / 看框架选择

博主这里使用 7.x 版本中的 7.10.1版本做演示

2. ES镜像部署

  1. ES镜像拉取 docker镜像地址

docker pull elasticsearch:7.10.1

  1. 修改JVM堆大小
    默认情况下,Elasticsearch的JVM使用的堆大小为2GB,可以修改ES的jvm默认参数

find /var/lib/docker/overlay2/ -name jvm.options

修改jvm配置,根据服务器配置修改合适大小
在这里插入图片描述
-Xms2g 改为 -Xms1g
-Xmx2g 改为 -Xmx1g

  1. 调整vm.max_map_count大小

这是一个设置内核参数的语法,vm.max_map_count 是内核参数的名称。它用于控制单个进程能够拥有的虚拟内存区域(即映射区域)的最大数量。
Elasticsearch使用了大量的内存映射文件来存储数据索引和缓存。为了保证Elasticsearch正常运行,在某些操作系统中需要增加 vm.max_map_count 的值。
通过将该参数设置为较大的值(例如262144),可以确保操作系统能够提供足够的虚拟内存区域供Elasticsearch使用,从而避免潜在的性能问题或错误。

vim /etc/sysctl.conf

在这里插入图片描述
保存退出,查看配置是否生效

sysctl -p

在这里插入图片描述

  1. 创建es容器挂载目录

mkdir -p data config plugins

[fd@localhost es]$ mkdir -p data config
[fd@localhost es]$ ll
总用量 8.0K
drwxr-xr-x. 2 fd fd 4.0K  6月 14 21:15 config
drwxr-xr-x. 2 fd fd 4.0K  6月 14 21:15 data
  1. 部署单点es,创建es容器
docker run -d \
--restart=always \
--name elasticsearch \
--network elk-net \
-p 9200:9200 \
-p 9300:9300 \
--privileged \
-v /home/fd/dockerApp/es/data:/usr/share/elasticsearch/data \
-v /home/fd/dockerApp/es/plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" \
elasticsearch:7.10.1

命令解释:
-e “cluster.name=es-docker-cluster”:设置集群名称
-e “http.host=0.0.0.0”:监听的地址,可以外网访问
-e “ES_JAVA_OPTS=-Xms512m -Xmx512m”:分配内存大小
-e “discovery.type=single-node”:单节点模式
-v /home/fd/dockerApp/es/data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
-v es-logs:/usr/local/elasticsearch7.12.1/logs:挂载逻辑卷,绑定es的日志目录
-v /home/fd/dockerApp/es/plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
–privileged:授予逻辑卷访问权
–netwo

Prometheus是一款开源的监控系统,用于记录和查询大量时间序列数据。使用Prometheus可以对系统的各种指标进行监控,例如CPU、内存、网络、存储等等。 本文将介绍如何使用Docker搭建一个基本的Prometheus监控系统,并通过一个简单的Demo来演示如何使用Prometheus监控一个HTTP服务。 1. 安装Docker 首先需要在本地安装Docker,具体安装方法可以参考官方文档:https://docs.docker.com/engine/install/ 2. 下载Prometheus镜像文件 在Docker中,我们可以通过命令行来下载Prometheus的镜像文件。打开终端,输入以下命令: ``` docker pull prom/prometheus ``` 这会从Docker Hub上下载最新的Prometheus镜像文件到本地。 3. 创建并启动Prometheus容器 下载完成后,我们可以创建一个名为“prometheus”的容器,并将Prometheus的默认配置文件(prometheus.yml)挂载到容器中,以便我们可以对其进行配置。启动容器的命令如下: ``` docker run -d --name prometheus -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus ``` 其中,-d参数表示在后台运行容器,--name参数指定容器的名称,-p参数将容器的9090端口映射到主机的9090端口,-v参数将主机上的prometheus.yml文件挂载到容器的/etc/prometheus/目录下。 4. 配置Prometheus Prometheus的默认配置文件位于/etc/prometheus/prometheus.yml。我们可以通过修改该文件,来配置Prometheus监控的指标和目标。 在本文的Demo中,我们将监控一个HTTP服务的请求次数和响应时间。因此,我们需要将Prometheus的配置文件中的targets字段修改为: ``` scrape_configs: - job_name: 'http_requests' static_configs: - targets: ['localhost:8000'] ``` 这表示我们要监控的是名为“http_requests”的任务,它的目标是localhost的8000端口。 5. 编写Demo应用 为了演示如何使用Prometheus监控一个HTTP服务,我们需要编写一个简单的Demo应用。这个Demo应用会监听8000端口,并在接收到请求时返回一个“Hello, World!”的响应。在响应前,它会随机休眠1-5秒钟,模拟HTTP请求的响应时间不同的情况。 Demo应用的代码如下: ``` import random import time from http.server import BaseHTTPRequestHandler, HTTPServer class MyHTTPHandler(BaseHTTPRequestHandler): def do_GET(self): response = b"Hello, World!" sleep_time = random.randint(1, 5) time.sleep(sleep_time) self.send_response(200) self.send_header("Content-type", "text/plain") self.send_header("Content-length", str(len(response))) self.end_headers() self.wfile.write(response) def run(server_class=HTTPServer, handler_class=MyHTTPHandler): server_address = ('', 8000) httpd = server_class(server_address, handler_class) httpd.serve_forever() if __name__ == "__main__": run() ``` 将以上代码保存为一个名为“demo.py”的文件。 6. 启动Demo应用 在终端中运行以下命令,启动Demo应用: ``` python demo.py ``` 7. 访问Demo应用 打开浏览器,访问http://localhost:8000,应该可以看到一个“Hello, World!”的页面。每次刷新页面,Demo应用就会模拟一次HTTP请求,并随机等待1-5秒钟,模拟HTTP请求的响应时间不同的情况。 8. 查看Prometheus监控数据 访问http://localhost:9090,可以看到Prometheus的首页。点击左侧的“Graph”菜单,进入查询页面。在表单中输入以下查询语句: ``` http_requests_latency_seconds ``` 点击“Execute”按钮,可以看到Demo应用的HTTP请求的响应时间分布情况。我们还可以使用其他查询语句,来查询Demo应用的HTTP请求次数、请求响应时间的平均值等等。 总结: 本文介绍了如何使用Docker搭建一个基本的Prometheus监控系统,并通过一个简单的Demo来演示如何使用Prometheus监控一个HTTP服务。Prometheus具有强大的查询语言和灵活的配置方式,可以用于监控各种系统指标和业务指标。开发人员可以根据自己的需求,自由地配置和扩展Prometheus监控系统。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值