观测云联动PostgreSQL实现告警
1创建PostgreSQL实例
1.1在阿里云界面选择RDS创建实例
1.2设置白名单
数据库实例管理->白名单与安全组
1.3创建账号
点击数据库实例管理->账号管理->创建账号
1.4登陆数据库
点击数据库实例->登陆数据库,选择DMS方式管理数据库(还有pgAdmin或者控制台方式等可选),输入账号密码等信息,postgres数据库为自带数据库,不用动这个数据库
1.5建库
在SQLConsole中创建数据库,表,插入数据
CREATE DATABASE mydatabase;
在mydatabase数据库下选择public的schema,执行如下代码创建表employees并插入数据
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL,
department TEXT
);
INSERT INTO employees (name, age, department) VALUES ('Alice', 30, 'HR');
INSERT INTO employees (name, age, department) VALUES ('Bob', 25, 'Engineering');
INSERT INTO employees (name, age, department) VALUES ('Charlie', 35, 'Marketing');
2部署观测云func平台
下载安装dataflux func开发平台
$ /bin/bash -c "$(curl -fsSL func.guance.com/portable-download)" -- --for=GSE
访问机器公网IP+8088端口,用户名密码默认admin登陆
3通过Func连接PostgreSQL和观测云
3.1创建psgql连接器
当用户需要访问外部数据库,第三方系统时除了在代码中直接实现之外可以使用func平台自带的连接器功能
具体可以参考连接:https://func.guance.com/doc/ui-guide-development-module-connector/
根据要求创建PostgreSQL连接器,并保存
将光标放在新建的连接器上会有连接器的具体用法
3.2创建datakit连接器
相同方式建立一个datakit的连接器,因为我们要通过datakit连接器来将pgsql中的数据打到观测云上
可以参考链接:https://func.guance.com/doc/practice-write-data-via-datakit/
3.3编写python脚本
编写python脚本,将PostgreSQL中的数据通过pgsql连接器取出并通过datakit连接器推送到观测云平台上
import time
@DFF.API('Query employees')
def query_employees():
# 初始化 PostgreSQL 连接器
postgresql = DFF.CONN('pgsql_guance')
# 执行查询,获取employees表中的一条数据
query = 'SELECT * FROM employees LIMIT 1'
result = postgresql.query(query)
# 如果查询结果为空,返回空列表
if not result:
return []
#初始化 DataKit 连接器
datakit = DFF.CONN('datakit')
# 获取当前时间戳
now = time.time()
# 处理查询结果并写入 DataKit
for row in result:
# 将数据作为指标写入 DataKit
_measurement = 'employees' # 指标集
_tags = { 'department': row['department'], 'name': row['name']} # 标签
_fields = { 'id': row['id'], 'name': row['name'], 'age': row['age'] } # 字段
datakit.write_metric(measurement=_measurement, tags=_tags, fields=_fields, timestamp=now)
# 将数据作为日志写入 DataKit
_measurement = 'employees' # 指标集(即日志中的来源)
_tags = { 'department': row['department'] } # 标签
_fields = { 'message': f"Employee {row['name']} with ID {row['id']} and age {row['age']}" } # 字段
datakit.write_logging(measurement=_measurement, tags=_tags, fields=_fields, timestamp=now)
return "OK"
def test_query_employees():
result = query_employees()
assert result == "OK", f"Expected 'OK' but got {result}"
return 'OK'
- 使用
@DFF.API('Query employees and write to DataKit')
装饰器定义一个 API 方法。这个方法将从 PostgreSQL 数据库查询数据,并通过 DataKit 连接器写入观测云。- 初始化 PostgreSQL 连接器。
- 执行查询,获取
employees
表中的一条数据。 - 初始化 DataKit 连接器。
- 获取当前时间戳。
- 处理查询结果并将数据分别写入 DataKit 的指标和日志中。
- 定义
test_query_and_write
测试方法:
定义一个测试方法来测试query_and_write
方法。- 调用
query_and_write
方法。 - 断言返回结果为 “OK”。
- 返回 ‘OK’ 表示测试通过。
- 调用
点击保存发布选择query_employees方法执行
结果如下
3.4观测云平台验证数据
脚本中将pgsql取出的数据写成 指标和日志到观测云平台
指标
饿mployees指标集,由于指标不支持string类型所以name和department以标签的形式输出
日志
4告警监控配置
4.1新建阈值检测
自定义告警规则
4.2告警通知对象设置
这里设置通知到钉钉,点击监控->通知对象管理->新建通知对象->钉钉机器人
在钉钉群中添加机器人,保存webhook地址,并配置到观测云的钉钉机器人通知对象中
在监控器里的告警策略管理中选择新添加的机器人
在监控器的事件通知->告警配置中添加有新建机器人的告警策略default,并保存
4.3查看结果
触发监控即可在钉钉中收到告警信息