09 - Metrics - 观察系统的健康指标 (3/6) - 使用 Metricbeat 掌握 Infrastructure 的健康状态 Host 篇

Metrics - 观察系统的健康指标 系列文章


本篇学习重点

  • 如何设定 Metricbeat 并且以 Host 部署的方式来收集 Elastic Observability 所需的资讯
  • 使用 Kibana Observability 掌控 Infrastructure 当中各服务与主机状态的简介

Infrastructure 监控的示范情境

由於我在写文章的当下,手边没有合适的实际环境来当作示范,所以只能以我目前手边有的机器,来模拟一些情境,主要是介绍配置的方式来说明,实际上若有更复杂的情境,可以以同样的类推以进行部署。

以下是我目前的进行的环境模拟:

服务名称 主机环境 情境说明
opbeans-node web server Mac mini's Docker container 主要只是让服务运作在 Container 之中
opbeans-node PostgreSQL DB server Mac mini's Docker container 主要只是让服务运作在 Container 之中
opbeans-node Redis server Mac mini's Docker container 主要只是让服务运作在 Container 之中
Metricbeat Mac mini 透过 Mac mini 的 Metricbeat 当作是 Infrastructure 当中,专门集中化收集 opbeans 这组服务的 Metrics。
Metricbeat web-server-1 @ Mac mini's Docker container 在 Container 之中,模拟另一台主机,并在里面安装独立的 Metricbeat 收集 System info。
Metricbeat web-server-2 @ Mac mini's Docker container 在 Container 之中,模拟另一台主机,并在里面安装独立的 Metricbeat 收集 System info。

opbeans-node 示范 App

opbeans-node 是 Elastic 官方维护的一个 Demo App,他是一个库存管理的系统,

我们可以从 Github 取得他的 Source Code:https://github.com/elastic/opbeans-node

整个 stack 就只有简单的 Web Server + PostgreSQL + Redis Server,架设起来长相如下:

09-opbean-web

如何设定 Metricbeat 来进行监控 Metrics 的收集

由於我们要使用 Mac Mini 当作 Metricbeat 监控的主要收集点,我们首先要先安装 Metricbeat,这部份请参考先前 Metricbeat 基本介绍的文章

接着我们分别针对我们这次要监控的情境进行设置。

使用 System module 收集机器的系统 Metrics

收集 System Metrics 是监控 Infrastructure 最基本的要取得的资讯,基本上整个 Infra 之中的每台主机,我们都应该要掌握机器的 System Metrics,不过因为要收到的够详细的资讯的话,Metricsbeat 的布署必须要安装在本机,无法透过 Remote 的方式直接取得,所以在我们的情境之中,会要在以下三台 Host (其中有两台是用 docker 模拟的) 都安装好 Metricbeat。

  • Mac Mini
  • web-server-1
  • web-server-2

接着启用 System module

./metricbeat enable system

并且在 ./modules.d/system.yml 调整相关的配置

- module: system
  period: 10s
  metricsets:
    - cpu
    - load
    - memory
    - network
    - process
    - process_summary
    - socket_summary
    # - entropy
    # - core
    # - diskio
    # - socket
    # - service
    # - users
  process.include_top_n:
    by_cpu: 5      # include top 5 processes by CPU
    by_memory: 5   # include top 5 processes by memory
  # Configure the mount point of the host’s filesystem for use in monitoring a host from within a container
  #system.hostfs: "/hostfs"

- module: system
  period: 1m
  metricsets:
    - filesystem
    - fsstat
  processors:
  - drop_event.when.regexp:
      system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib|snap)($|/)'

- module: system
  period: 15m
  metricsets:
    - uptime

我们可以设定不同的 period 来以不同的频率收集不同的 metricsets

注意:由於 System module 要收集许多系统层级的资讯,会需要的权限会较高,官方文件有特别提醒要谨慎的开放权限。[1]

启用 PostgreSQL module

接着我们要启用 PostgreSQL module

./metricbeat enable postgresql

./modules.d/postgresql.yml 调整相关的配置

- module: postgresql
  metricsets:
    # Stats about every PostgreSQL database
    - database
    # Stats about the background writer process's activity
    - bgwriter
    # Stats about every PostgreSQL process
    - activity
  period: 10s
  hosts: ["postgres://localhost:5432?sslmode=disable"]
  username: postgres
  password: _PASSWORD_

这边要注意,因为我的示范环境 PostgreSQL 没有开启 SSL,所以有特别加上 sslmode=disable ,这个不应该在正式环境出现。

启用 Redis module

接着启用 Redis module

./metricbeat enable redis

./modules.d/redis.yml 调整相关的配置

- module: redis
  metricsets:
   - info
   - key
   - keyspace
  period: 10s

  # Redis hosts
  hosts: ["127.0.0.1:6379"]

  # Network type to be used for redis connection. Default: tcp
  #network: tcp

  # Max number of concurrent connections. Default: 10
  #maxconn: 10

  # Redis AUTH password. Empty by default.
  #password: foobared
  
  key.patterns:
    - pattern: 'pipeline-*'
      limit: 20

在这里我有启用 key 的资讯收集,所以要设定好 key.patterns 设定。

以上三种模组只是个示范,Metricbeat 里已经整合好 60 多种的模组,可以直接使用,对於想要监控自己 host 的各种服务,可以简单的开启即使用。

设定完成後,启用 Metricbeat 我们就可以到 Kibana Observability 来观察收集到的资讯。

使用 Kibana Observability 来掌握 Infrastructure 的 Metrics

Inventory 概观

从 Kibana Observability 的 Metric Inventory 画面,我们先针对 Hosts 的方式来检示,预设的 Metric 是观看 CPU usage ,这部份我们可以自己依需求调整,甚至可以储存成不同的 view,方便日後切换检示。

由於我的情境,只有三台 Host,所以看到的画面如下图,三台机器全部列在 Inventory 的列表上,并且即时的显示 CPU 的使用量,而若是要检示历史的数据变化,在最底下有检示历史数据的走势图。

09-kibana-obs-metrics-inventory

Inventory 的分群与搜寻检示

Inventory 预设的检示画面其实很阳春,我们可以多透过 Group by 的功能,来使用像是 Service type 或甚至自己定义的栏位也可以用来 Group by,只要是 index 里面有收集到的资讯,都可以使用,所以先前所建议我们可以使用 TagsFields 等自订义的栏位,就能派上用场。

09-kibana-obs-inventory-group-by

使用 Service type Group By 之後的结果如下,可以更快速的专注在某一块要观察的主题上。

09-kibana-obs-inventory-service-view

从 Inventory 的概观,进入到 Host 的细节,更深入的 Observability

一但我们发现某一台机器有异常,想要多观察时,这时只要点下这台机器,我们马上可以进入细节的页面,而这个细节的页面,也就是 Elastic Observability 整合好各种资料检示的入口,让我们能从 Metrics、Logs、Processes…等各种资讯来盘查问题,也可以查看 Machine Learning 的 Anomalies 的执行状况,甚至可以直接连接到 APM 与 Uptime 继续追纵。

09-kibana-obs-inventory-detail-view

Kibana 另外内建的 Dashboard

透过 Metriccbeat 所收集的资讯,除了 Kibana Observability 这边可以看到之外,特别是针对像是 System、PostgreSQL、Redis 的服务,Elastic 也有预先建立好这些服务所专用的各种 Dashboard,非常的丰富,可以从 Kibana > Analytics > Dashboard 去搜寻。

09-kibana-metricbeat-dashboard

以下图为例,就是 [Metricbeat System] Host overview ECS 的 Dashboard。

image-20210924222311296

本章小结

针对 Host 服务所要观察的 Metrics 资讯,Elastic 透过 Metricbeat 整合好许多的服务,也建立了各种不错的 Dashboard,这部份对於我们要快速的掌控系统及服务的状态,能很容易的上手,同时 Elastic Observability 针对 Metrics, Logs, Uptime, Trace 的整合也做得蛮不错,让我们要追纵问题时,可以容易的将这些资讯串连在一起,在 Observability 上的确有不错的帮助。

参考资讯

  1. 官方文件 - Metricbeat System Module

查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!


<<:  Day24 - 为 Kubernetes 应用增添 Database

>>:  今天不写题,来看Half-Dive 资讯:3

第4砍 - 蓄势待发

今晚我想来点... 麻而不辣的 linker script [叮咚] 您的外送餐点到瞜, 已经依照您...

[Day 22] 卷积类明星模型大乱斗 ! EFN特别版

1. 回顾 下列是过去十天我用各种技巧训练的模型, 只要该技巧对 val acc 或 val los...

DAY27-SQL语法(VIEW 实作)

建立虚拟资料表有两个方法,今天要来示范第一个方法,我已第四章报表作为范例: 首先我们,先在你所使用的...

Day 01 : 导言 - 知识是如何形成的?

【Obsidian 双向链结型笔记工具研究与应用,打造属於个人的专业知识图谱】 Day 01 : 导...

使用 TorchServe 部署 Model

TorchServe TorchServe 是 PyTorch 提供给开发者部署 models 的工...