Beats:在 Docker 中同时部署 Metricbeat 和 Elasticsearch

news2024/11/16 13:22:47

 在本教程中,我们将部署一个 metricbeat 来监控正在运行的容器的健康状况和系统指标。

为什么需要监控,为什么需要 Metricbeat?

一个常见的问题,但很少有人回答。 首先,无论我们部署的是 docker 容器还是老式的金属箱(即物理服务器),监控它们的健康状况至关重要。 最大的问题是,当我们在现场运行多台服务器时,识别哪台服务器出现问题的效率如何? 或者确定特定服务器何时崩溃有多容易? 答案可以在监控数据中找到(如果我们一开始就收集过)。

基于经验和团队文化,管理员通常编写自己的脚本或程序来收集服务器指标。 事实上,这是一种相当直接的方法,通常效果很好……直到部署了许多服务器实例。 脚本和程序是否可扩展以处理多服务器监控? 有多少定制以及监控不同系统(例如操作系统、数据库、应用程序服务器等)的难易程度。 如果以上问题的答案不是很确定,我们可能需要更好的解决方案。

来自 Elastic(该公司)的 Metricbeat 提供了一个单一的可执行文件,它有助于获取最常见的服务器/服务指标,包括主机(即操作系统级别)、数据库(mySQL、postgreSQL)、消息队列(kafka、rabbitMQ)等等。 与其它解决方案不同,Metricbeat 得到维护并积极开发以支持度量消费; 现在我们需要做的就是维护配置文件而不是我们脚本/程序中的逻辑。

使用 docker 创建 Elastic Stack

我们首先来仿照之前的文章 “Elasticsearch:如何在 Docker 上运行 Elasticsearch 8.x 进行本地开发”  来创建我们的 docker-compose.yml 文件:

docker-compose.yml

version: "3.9"
services:
  elasticsearch:
    image: elasticsearch:8.6.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
      - xpack.security.enabled=false
    volumes:
      - type: volume
        source: es_data
        target: /usr/share/elasticsearch/data
    ports:
      - target: 9200
        published: 9200
    networks:
      - elastic

  kibana:
    image: kibana:8.6.2
    container_name: kibana
    ports:
      - target: 5601
        published: 5601
    depends_on:
      - elasticsearch
    networks:
      - elastic

  metricbeat:
    image: docker.elastic.co/beats/metricbeat:8.6.2
    container_name: metricbeat
    environment:
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
    volumes:
      - metricbeat-data01:/usr/share/metricbeat/data
    networks:
      - elastic
    depends_on:
        - elasticsearch

volumes:
  es_data:
    driver: local
  metricbeat-data01:
    driver: local

networks:
  elastic:
    name: elastic
    driver: bridge

我们添加了一个名为 metricbeat 的服务,并通过环境变量 (ELASTICSEARCH_HOSTS) 声明了目标 elasticsearch 主机。 还为此服务 (metricbeat-data01) 添加了一个新卷(用于数据存储)。 该服务的网络应设置为 elastic,原因是该服务应与我们的目标 elasticsearch 主机/节点位于同一网络上。

让我们通过发出以下命令来启动服务:

docker-compose up

 等所有的容器都启动后,我们可以使用如下的命令来进行查看:

docker ps
$ docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED              STATUS              PORTS                              NAMES
52072cc96dfc   docker.elastic.co/beats/metricbeat:8.6.2   "/usr/bin/tini -- /u…"   About a minute ago   Up About a minute                                      metricbeat
2511ea046940   kibana:8.6.2                               "/bin/tini -- /usr/l…"   2 minutes ago        Up About a minute   0.0.0.0:5601->5601/tcp             kibana
4465801cb251   elasticsearch:8.6.2                        "/bin/tini -- /usr/l…"   2 minutes ago        Up About a minute   0.0.0.0:9200->9200/tcp, 9300/tcp   elasticsearch

从上面,我们可以看出来正在运行的容器: elasticsearch,kibana 及 metricbeat。

我们可以到 Kibana 中进行查看:

 

 

从上面,我们可以看出来被收集进来的指标信息。

从上面显示的信息中,我们可以看出来它收集的正是运行 Metricbeat 容器的指标。在默认的情况下,system 模块是被启动的。它会自动帮我们收集系统指标。有关 Metricbeat 的使用请阅读之前的文章 “Beats:Beats 入门教程 (二)”。 

恭喜我们已经成功地在我们的集群上添加了 metricbeat 监控! 收集的数据可以显示在反映操作系统/主机指标的指标应用程序上,包括 CPU、内存、负载、网络、进程等。

显示操作系统/主机指标非常有用,但有时我们可能也想知道服务器/服务的行为方式。 举个例子,我们可以监控我们的 elasticsearch 节点的健康状况吗? 如果您现在点击 “Stack Monitoring” 应用程序,将显示此页面:

 

 

简单的意思是……没有可用的 Elasticsearch 监控数据 :(

 

了解 metricbeat 模块

对于现代版本的弹性堆栈,弹性搜索节点的监控建议启用名为“elasticsearch-xpack”的 metricbeat 模块。 那么什么是 metricbeat 模块??? 一个简单的句子——模块包含与目标服务器/服务对话的逻辑,并维护一组用于收集的指标的逻辑分组; 因此它就像一个配置管理器。

模块在 yml 文件中声明并存储在 {metricbeat_root}/modules.d 文件夹下。 elasticsearch-xpack.yml 示例如下:

elasticsearch-xpack.yml

# Module: elasticsearch
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/main/metricbeat-module-elasticsearch.html

- module: elasticsearch
  xpack.enabled: true
  period: 10s
  hosts: ["http://localhost:9200"]
  #username: "user"
  #password: "secret"

对于大多数情况,我们会修改要收集的指标集(即指标集设置)、监控主机(例如 localhost:9200 或 node01:9200)并激活 xpack 监控功能(即 xpack.enabled)。

现在摆在我们面前的挑战是……如何更新 elasticsearch-xpack.yml 文件? 好吧……一种方法是我们启动服务,然后通过 telnet / ssh 进入 metricbeat 容器并更新配置文件。例如,我们可以这样来进入到容器中:

$ docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED             STATUS             PORTS                              NAMES
52072cc96dfc   docker.elastic.co/beats/metricbeat:8.6.2   "/usr/bin/tini -- /u…"   About an hour ago   Up About an hour                                      metricbeat
2511ea046940   kibana:8.6.2                               "/bin/tini -- /usr/l…"   About an hour ago   Up About an hour   0.0.0.0:5601->5601/tcp             kibana
4465801cb251   elasticsearch:8.6.2                        "/bin/tini -- /usr/l…"   About an hour ago   Up About an hour   0.0.0.0:9200->9200/tcp, 9300/tcp   elasticsearch
$ docker exec -it metricbeat /bin/bash
metricbeat@52072cc96dfc:~$ 

这种方式可能是最简单的,但它根本不可扩展,并且引入了最终难以维护的手动操作。 一个不太脏的解决方案肯定是值得的。

构建自定义的 metricbeat docker 镜像

就像我们之前讨论的那样,我们试图只维护配置文件而不是脚本/程序逻辑(也是手动操作)。 因此,针对上述挑战的更简洁的解决方案是使用更新的 metricbeat.yml 构建自定义 docker 镜像。

创建 metricbeat.yml 如下:

metricbeat.yml

metricbeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  username: '${ELASTICSEARCH_USERNAME:}'
  password: '${ELASTICSEARCH_PASSWORD:}'

# enabled modules for monitoring (e.g. elasticsearch-xpack)
metricbeat.modules:
- module: elasticsearch
  xpack.enabled: true
  period: 10s
  hosts: ["http://node01:9200"]
$ pwd
/Users/liuxg/data/metricbeat
$ ls
docker-compose.yml metricbeat.yml

我们声明要启用 elasticsearch 模块,目标主机是 elasticsearch:9200。 由于 hosts 配置是一个数组,因此可以仅设置 1 个 metricbeat 实例并使用多节点的指标。

接下来,让我们更新 docker-compose.yml 如下:

docker-compose.yml

version: "3.9"
services:
  elasticsearch:
    image: elasticsearch:8.6.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
      - xpack.security.enabled=false
    volumes:
      - type: volume
        source: es_data
        target: /usr/share/elasticsearch/data
    ports:
      - target: 9200
        published: 9200
    networks:
      - elastic

  kibana:
    image: kibana:8.6.2
    container_name: kibana
    ports:
      - target: 5601
        published: 5601
    depends_on:
      - elasticsearch
    networks:
      - elastic

  metricbeat:
    build: .
    # image: docker.elastic.co/beats/metricbeat:8.6.2
    container_name: metricbeat
    environment:
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
    volumes:
      - metricbeat-data01:/usr/share/metricbeat/data
    networks:
      - elastic
    depends_on:
        - elasticsearch

volumes:
  es_data:
    driver: local
  metricbeat-data01:
    driver: local

networks:
  elastic:
    name: elastic
    driver: bridge

配置文件的唯一变化是用 build 配置替换 image 配置。 build 只是意味着我们正在从本地 Dockerfile 配置构建自定义镜像。 Dockerfile 包含构建自定义镜像的步骤和我们的版本如下:

FROM docker.elastic.co/beats/metricbeat:8.6.2
COPY metricbeat.yml /usr/share/metricbeat/metricbeat.yml
USER root
RUN chown root /usr/share/metricbeat/metricbeat.yml
$ pwd
/Users/liuxg/data/metricbeat
$ ls
Dockerfile         docker-compose.yml metricbeat.yml

这很简单,我们将基础 docker 镜像设置为 docker.elastic.co/beats/metricbeat:8.6.2。 然后我们将自定义的 metricbeat.yml 复制到镜像的 /usr/share/metricbeat 路径下。 最后使用 root 用户更改 metricbeat.yml 的访问权限并完成。

接下来是构建镜像,但是发出如下的命令:

如果一切顺利,我们的镜像很快就会建立起来了。

是时候启动服务并验证结果了:

docker-compose up

接下来,我们到 Kibana 中去查看:

 

很显然,这次我们看到了不一样的结果。

 

我们可以看到想要的指标信息。

Horray ~ 我们做到了,metricbeat 正在收集 elasticsearch 节点的指标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树

打卡第23天,这一章节二叉树最后一天,难度渐渐上来了。 今日任务 669.修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。…

中介效应分析-方法和模型发展【论文详解】

中介效应分析-方法和模型发展 – 潘登同学的论文精读 文章目录中介效应分析-方法和模型发展 -- 潘登同学的论文精读检验中介效应流程直接效应、间接效应与总效应完全中介与部分中介Stata代码考虑自变量X对因变量Y的影响, 如果X通过影响变量M而对Y产生影响, 则称M为中介变量。Yc…

VMware15配置NAT模式联通网络

最近为了测试C# 开发的桌面应用程序悬浮球的兼容性,在虚拟机上安装了win7系统和xp系统,之前也安装过黑苹果系统,但是win系统倒是第一次安装,在win7系统联网的时候,踩了一些坑,整理纪录一下。 设置主物理机配…

【JVM篇1】认识JVM,内存区域划分,类加载机制

目录 一、JVM内存区域划分 ①程序计数器(每个线程都有一个) ②栈:保存了局部变量和方法调用的信息(每一个线程都有一个栈) 如果不停地调用方法却没有返回值,会产生什么结果 ③堆(每一个进程都有一个堆,线程共享一个堆) 如何区分一个变量是…

【C++】C++11新特性——基础特性

文章目录一、列表初始化1.1 {}初始化1.2 initializer_list类型二、类型推导2.1 auto2.2 auto注意事项2.3 decltype三、新增与改进3.1 nullptr3.2 范围for3.3 array3.4 forward_list3.5 unordered系列3.6 final与override一、列表初始化 1.1 {}初始化 C11 引入了一个新的初始化…

[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(章节题库+答案解析)

练习 选择题 算法的计算量的大小称为计算的( )。 A.效率 B.复杂性 C.现实性 D.难度 计算机算法指的是解决问题的步骤序列,它必须具备( )三个特性。 A.可执行…

“快速掌握如何用FFmpeg在Python中截取定时间隔的MP4视频画面“

目录 简介: 源代码: 源代码说明: 这段代码中,首先定义了输入视频文件名、字体文件路径和输出图像文件名格式。然后使用subprocess模块的call函数调用FFmpeg命令。FFmpeg命令被定义为一个列表,其中每个元素都是命令中…

RocketMQ5.0.0消息消费<二> _ 消息队列负载均衡机制

目录 一、消费队列负载均衡概览 二、消费队列负载均衡实现 1. 负载均衡UML 2. 启动RebalanceService线程 3. PUSH模式负载均衡 三、负载均衡策略 四、参考资料 一、消费队列负载均衡概览 RocketMQ默认一个主题下有4个消费队列,集群模式下同一消费组内要求每个…

合并链表相关的练习

目录 一、合并两个有序链表 二、两数相加 一、合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2&…

熬夜30天吃透这九大Java核心专题,我收割了3个大厂offer

这次一共收割了3个大厂offer,分别是蚂蚁金服、美团和网易,特意分享这次对我帮助非常大的宝典资料,一共涉及九大核心专题,分别是计算机网络、操作系统、MySQL、Linux、JAVA、JVM、Redis、消息队列与分布式、网站优化相关&#xff0…

MySQL8启动错误“Neither found #innodb_redo subdirectory, nor ib_logfile* files”

今天做MySQL备份文件回复测试,用来检验MySQL备份文件可用性。 MySQL版本8.0.32 备份文件为腾讯云MySQL实例,版本8.0 使用xtrabackup恢复备份。执行过程顺利,启动MySQL时发生错误。提示如下: 注意,这里使用了systemctl stop mysql。虽然启动失败了,但是如果不执行这条…

全国青少年软件编程(Scratch)等级考试一级真题——2019.9

青少年软件编程(Scratch)等级考试试卷(一级)分数:100 题数:37一、单选题(共25题,每题2分,共50分)1.小明在做一个采访的小动画,想让主持人角色说“大家好!”3秒…

AcWing 3555. 二叉树

第一种做法是dfs。但是注意,如果是非常单纯的dfs,要把每个节点可以到达的所有节点都记录下来(父节点两个子节点)。如果只记录了子节点,没记录父节点,就失去了一个方向,肯定出错。 例如求2和6之…

Git常见问题:Your branch and ‘xxx/xxx‘ have diverged

报这个错就是因为你和远程库出现分叉了,具体表现是是由于同一个分支有多人修改,多人commit造成的 用户1操作 用户2操作 T1 git co -b brv_1 git co -b brv_1 T2 git add test2.java git commit -m m2 git push T3 git add test1.java git comm…

VR全景博物馆,打造7*24小时的线上参访体验

导语:博物馆作为人们了解历史、文化和艺术的重要场所,现在可以通过VR全景技术来进行展览,让参观者身临其境地感受历史文化的魅力。本文将介绍博物馆VR全景的特点、优势,以及如何使用VR全景技术来丰富博物馆的展览和教育活动。什么…

数据库:Mysql数据库安装及使用

目录 一、数据库介绍 1、基本概念 2、数据库类型 3、版本演变 二、Mysql安装 1、官网下载yum安装 2、手动配置yum安装 三、Mysql基本操作 1、登录与改密 2、检测数据库健康 3、 库的创建与使用 4、数据类型 5、修饰符 6、表的创建与使用 7、分组查询 8、查询排…

hive之正则函数研究学习regex/regex_replace/regex_extract

首先学习这个之前要先知道一些正则的基本知识。 随便百度一下正则表达式 – 元字符 | 菜鸟教程 字符描述\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,n 匹配字符 "n"。\n 匹配一个换行符。序列 \\ 匹…

残酷现实:大部分的App小程序,日活<100

残酷现实:99%的APP小程序&#xff0c;日活<100 日活跃用户数量(DAU&#xff09;是一个核心指标 Daily Active Users 互联网的难度系数一路拉高 只有流过血的战士&#xff0c;才能意识到战场的残酷 趣讲大白话&#xff1a;赵本山小品台词&#xff0c; 残酷的现实已直逼我心理…

千访 | 互动千万!小红书博主修炼手册

采访手记&#xff1a; 截止到目前&#xff0c;姜老师的护肤成分室在小红书的粉丝量已达150W。在赛道内卷的美妆区&#xff0c;突破真人出镜讲解&#xff0c;采用二次元漫画&#xff0b;变美内容结合&#xff0c;成为护肤动画领域的头部大号。 接下来&#xff0c;就让我们通过…

[算法]希尔排序——插入排序的升级

参考&#xff1a;《漫画算法-小灰的算法之旅》 目录 1、希尔排序的思想 2、例子 3、希尔排序代码 4、希尔排序的优化 5、希尔排序是不稳定排序 问&#xff1a;什么情况下插入排序的工作量会比较小呢&#xff1f; 答&#xff1a;首先&#xff0c;当数组元素较小时&#xf…