由於我在写文章的当下,手边没有合适的实际环境来当作示范,所以只能以我目前手边有的机器,来模拟一些情境,主要是介绍配置的方式来说明,实际上若有更复杂的情境,可以以同样的类推以进行部署。
以下是我目前的进行的环境模拟:
服务名称 | 主机环境 | 情境说明 |
---|---|---|
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
是 Elastic 官方维护的一个 Demo App,他是一个库存管理的系统,
我们可以从 Github 取得他的 Source Code:https://github.com/elastic/opbeans-node
整个 stack 就只有简单的 Web Server + PostgreSQL + Redis Server,架设起来长相如下:
由於我们要使用 Mac Mini 当作 Metricbeat 监控的主要收集点,我们首先要先安装 Metricbeat,这部份请参考先前 Metricbeat 基本介绍的文章。
接着我们分别针对我们这次要监控的情境进行设置。
收集 System Metrics 是监控 Infrastructure 最基本的要取得的资讯,基本上整个 Infra 之中的每台主机,我们都应该要掌握机器的 System Metrics,不过因为要收到的够详细的资讯的话,Metricsbeat 的布署必须要安装在本机,无法透过 Remote 的方式直接取得,所以在我们的情境之中,会要在以下三台 Host (其中有两台是用 docker 模拟的) 都安装好 Metricbeat。
接着启用 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
./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
./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 的 Metric Inventory 画面,我们先针对 Hosts
的方式来检示,预设的 Metric 是观看 CPU usage
,这部份我们可以自己依需求调整,甚至可以储存成不同的 view,方便日後切换检示。
由於我的情境,只有三台 Host,所以看到的画面如下图,三台机器全部列在 Inventory 的列表上,并且即时的显示 CPU 的使用量,而若是要检示历史的数据变化,在最底下有检示历史数据的走势图。
Inventory 预设的检示画面其实很阳春,我们可以多透过 Group by 的功能,来使用像是 Service type
或甚至自己定义的栏位也可以用来 Group by,只要是 index 里面有收集到的资讯,都可以使用,所以先前所建议我们可以使用 Tags
、Fields
等自订义的栏位,就能派上用场。
使用 Service type
Group By 之後的结果如下,可以更快速的专注在某一块要观察的主题上。
一但我们发现某一台机器有异常,想要多观察时,这时只要点下这台机器,我们马上可以进入细节的页面,而这个细节的页面,也就是 Elastic Observability 整合好各种资料检示的入口,让我们能从 Metrics、Logs、Processes…等各种资讯来盘查问题,也可以查看 Machine Learning 的 Anomalies 的执行状况,甚至可以直接连接到 APM 与 Uptime 继续追纵。
透过 Metriccbeat 所收集的资讯,除了 Kibana Observability 这边可以看到之外,特别是针对像是 System、PostgreSQL、Redis 的服务,Elastic 也有预先建立好这些服务所专用的各种 Dashboard,非常的丰富,可以从 Kibana > Analytics > Dashboard 去搜寻。
以下图为例,就是 [Metricbeat System] Host overview ECS 的 Dashboard。
针对 Host 服务所要观察的 Metrics 资讯,Elastic 透过 Metricbeat 整合好许多的服务,也建立了各种不错的 Dashboard,这部份对於我们要快速的掌控系统及服务的状态,能很容易的上手,同时 Elastic Observability 针对 Metrics, Logs, Uptime, Trace 的整合也做得蛮不错,让我们要追纵问题时,可以容易的将这些资讯串连在一起,在 Observability 上的确有不错的帮助。
查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!
<<: Day24 - 为 Kubernetes 应用增添 Database
今晚我想来点... 麻而不辣的 linker script [叮咚] 您的外送餐点到瞜, 已经依照您...
1. 回顾 下列是过去十天我用各种技巧训练的模型, 只要该技巧对 val acc 或 val los...
建立虚拟资料表有两个方法,今天要来示范第一个方法,我已第四章报表作为范例: 首先我们,先在你所使用的...
【Obsidian 双向链结型笔记工具研究与应用,打造属於个人的专业知识图谱】 Day 01 : 导...
TorchServe TorchServe 是 PyTorch 提供给开发者部署 models 的工...