夜莺监控 是优秀的国产开源监控软件,笔者在上一家创业公司也曾经使用过,整体体验非常优秀。夜莺监控集合了 Prometheus 和 Grafana 的优点,你可以在 UI 上管理和配置告警策略,也可以对分布在多个 Region 的指标、日志、链路追踪数据进行统一的可视化和分析。
夜莺监控的数据源支持 Prometheus 及兼容的服务,比如 Thanos、VictoriaMetrics 等等。GreptimeDB 作为一个云原生、可扩展的时序数据库,也高度兼容 Prometheus 及其查询语言 PromQL(请阅读《如何配置 GreptimeDB 作为 Prometheus 的长期存储》),因此也可以配置成夜莺的指标数据源。本文将以 docker compose 配置为例,来介绍如何将 GreptimeDB 作为夜莺监控的读写数据源。接入 GreptimeDB 后,除了高度的兼容性之外,你还可以获得极佳的水平扩展能力,以及基于 SQL 的数据分析和管理功能。
本文要求你在本机上安装 docker 和 docker-compose 命令行。
配置步骤
首先,我们从夜莺 release 页面下载最新稳定版本的夜莺监控软件,本文撰写时候为 7.3.1 版本,可以手工下载,也可以用 curl 命令下载:
curl -fsSL -O https://github.com/ccfos/nightingale/releases/download/v7.3.1/n9e-v7.3.1-linux-arm64.tar.gz
解压缩:
tar zxvf n9e-v7.3.1-linux-arm64.tar.gz
x cli/cli.go
x cli/upgrade/config.go
x cli/upgrade/readme.md
x cli/upgrade/upgrade.go
x cli/upgrade/upgrade.sql
x docker/.dockerignore
x docker/Dockerfile.goreleaser
x docker/Dockerfile.goreleaser.arm64
....
我们进入其中的 docker 目录:
cd docker/compose-bridge
Docker compose 可以方便地测试夜莺监控,本文也采用这种方式,实际部署请参照**夜莺官方文档**。
为了使用 GreptimeDB,我们需要修改下默认的配置和镜像。
首先,修改 docker-compose.yaml
,在 services
部分增加 greptimedb 镜像及容器:
greptimedb:
image: greptime/greptimedb:v0.9.2
container_name: greptimedb
hostname: greptimedb
restart: always
environment:
TZ: Asia/Shanghai
ports:
- "4000:4000"
- "4002:4002"
networks:
- nightingale
command:
- "standalone"
- "start"
- "--http-addr"
- "0.0.0.0:4000"
- "--mysql-addr"
- "0.0.0.0:4002"
我们在这里使用了 GreptimeDB 最新稳定版本 v0.9.2,以 standalone 单机模式启动,并开放端口 4000 和 4002,分别是 HTTP 协议和 MySQL 协议端口,容器名为 greptimedb
。
第二步,修改夜莺配置文件,将 metric 数据写入 GreptimeDB,编辑文件 etc-nightingale/config.toml
,找到 [[Pushgw.Writers]]
部分:
[[Pushgw.Writers]]
Url = "http://greptimedb:4000/v1/prometheus/write"
接下来启动所有服务,执行命令:
docker-compose up
如果一切正常,打开浏览器访问夜莺的 web 页面,地址是 http://localhost:17000/
输入默认的用户名 root 和密码 root.2020 即可登录。
此时夜莺已经开始将 Categraf 采集的指标数据写入 GreptimeDB,不过我们还需要配置 GreptimeDB 数据源才能查询。
我们进入配置中心菜单,找到数据源,点击新建:
选择 Prometheus like
,并填写关键信息:
- 名称:GreptimeDB
- HTTP 查询接口 URL:
http://greptimedb:4000/v1/prometheus
,GreptimeDB 原生支持了 Prometheus 的查询 API 及 PromQL。 - 跳过 SSL 验证
- Remote Write URL:
http://greptimedb:4000/v1/prometheus/write
点击测试并保存
即可。
最后一步,我们导入默认的内置 Linux 主机监控大盘来查询数据,进入监控仪表盘
,选择 Default Busi Group
默认业务组:
点击右上角导入菜单,选择 Linux 的 Linux Host by Categraf v2
大盘,点击导入即可:
打开该大盘,如果一切正常,应该会显示本机的监控数据:
使用 SQL 查看和管理指标数据
打开浏览器,访问 http://localhost:4000/dashboard/ 即可访问 GreptimeDB 内置的 dashboard 页面,在这里查看和管理所有的指标表以及数据:
点击左侧加号,打开一个查询界面,可以在这里输入一些 SQL 查询并执行:
可以输入任意的 SQL 进行关联查询和分析,也可以执行管理操作,比如删除表、查看表定义之类。
默认 GreptimeDB 会为 Prometheus Remote Write 使用 metric 引擎,每个 Prometheus 指标对应一张逻辑表,所有的逻辑表会映射到物理大宽表,这张表默认是 greptime_physical_table
,所有的指标数据都在这张表里,可以对这张宽表做各种分析和查询:
show create table greptime_physical_table;
CREATE TABLE IF NOT EXISTS `greptime_physical_table` (
`greptime_timestamp` TIMESTAMP(3) NOT NULL,
`greptime_value` DOUBLE NULL,
`ident` STRING NULL,
`interface` STRING NULL,
`source` STRING NULL,
`name` STRING NULL,
`instance` STRING NULL,
`code` STRING NULL,
`method` STRING NULL,
`path` STRING NULL,
`service` STRING NULL,
`version` STRING NULL,
`quantile` STRING NULL,
`le` STRING NULL,
`url` STRING NULL,
`cpu` STRING NULL,
`channel` STRING NULL,
`host_ident` STRING NULL,
TIME INDEX (`greptime_timestamp`),
PRIMARY KEY (`ident`, `interface`, `source`, `name`, `instance`, `code`, `method`, `path`, `service`, `version`, `quantile`, `le`, `url`, `cpu`, `channel`, `host_ident`)
)
ENGINE=metric
WITH(
physical_metric_table = 'true'
)
可以看到,这张大宽表包含了所有指标的 tag,以及共同的 value 列 greptime_value 和时间戳列 greptime_timestamp。更多关于 GreptimeDB 对于 Prometheus 的支持,请阅读文档。
总结
本文以 docker compose 为例,展示了如何将 GreptimeDB 配置为夜莺监控的 Prometheus 数据源,处理监控指标数据的读写请求。GreptimeDB 原生支持 PromQL ,兼容率达到 89%(第三方独立实现最高),并且具备极佳的扩展性,可以使用 SQL 来分析和管理 Prometheus 指标数据,为可观测领域带来新的可能。
关于 Greptime
Greptime 格睿科技专注于为可观测、物联网及车联网等领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前基于云原生的时序数据库 GreptimeDB 已经衍生出多款适合不同用户的解决方案,更多信息或 demo 展示请联系下方小助手(微信号:greptime)。
欢迎对开源感兴趣的朋友们参与贡献和讨论,从带有 good first issue 标签的 issue 开始你的开源之旅吧~期待在开源社群里遇见你!添加小助手微信即可加入“技术交流群”与志同道合的朋友们面对面交流哦~
Star us on GitHub Now: https://github.com/GreptimeTeam/greptimedb
Twitter: https://twitter.com/Greptime
Slack: https://greptime.com/slack