Grafana官方文档:https://grafana.com/docs/grafana/latest/
uv的菜鸟教程文档:
https://www.runoob.com/python3/uv-tutorial.html
nvm的华为提供的镜像源:
https://mirrors.huaweicloud.com/mirrorDetail/5ea14e0f0cbca48259f6e3e0?mirrorName=nodejs&catalog=tool
安装完成nodejs后,配置国内镜像(不要使用华为镜像):
npm config set registry https://registry.npmmirror.com
Grafana的Correlations功能使用的MySQL数据库脚本:
-- 源数据库:ops_src 【Grafana数据源 mysql-source 使用这个库】
CREATE DATABASE IF NOT EXISTS ops_src DEFAULT CHARACTER SET utf8mb4;
USE ops_src;
-- 运维异常事件表:记录发生故障事件
CREATE TABLE IF NOT EXISTS ops_event (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time DATETIME COMMENT '事件发生时间',
service_name VARCHAR(64) COMMENT '服务名称:order-service、user‑service、gateway',
event_level VARCHAR(16) COMMENT '级别 critical/warn/info',
event_msg VARCHAR(256) COMMENT '故障简要描述',
pod_name VARCHAR(128) COMMENT 'k8s pod名称'
);
-- 插入测试故障事件
INSERT INTO ops_event(event_time,service_name,event_level,event_msg,pod_name) VALUES
('2026-10-08 09:10:00','order-service','critical','接口超时,调用数据库慢','order‑7f9d6‑xqz2w'),
('2026-10-08 09:12:00','gateway','warn','请求QPS突增','gateway‑58f7‑mz8k7'),
('2026-10-08 09:15:00','user-service','critical','数据库连接耗尽','user‑68bc‑vqz9l');
-- 目标数据库 ops_dst 【Grafana数据源 mysql-target 使用这个库】
CREATE DATABASE IF NOT EXISTS ops_dst DEFAULT CHARACTER SET utf8mb4;
USE ops_dst;
-- 服务运行日志表,详细日志,correlations跳转后查询这张表
CREATE TABLE IF NOT EXISTS ops_log (
log_id INT AUTO_INCREMENT PRIMARY KEY,
log_time DATETIME COMMENT '日志时间',
service_name VARCHAR(64) COMMENT '服务名,和ops_event.service_name对应',
log_level VARCHAR(16),
log_content TEXT COMMENT '详细日志内容',
pod_name VARCHAR(128)
);
-- 插入对应服务详细日志
INSERT INTO ops_log(log_time,service_name,log_level,log_content,pod_name) VALUES
('2026-10-08 09:09:55','order-service','ERROR','sql execute slow select * from t_order cost 2800ms','order‑7f9d6‑xqz2w'),
('2026-10-08 09:10:02','order-service','ERROR','http /api/order timeout','order‑7f9d6‑xqz2w'),
('2026-10-08 09:11:58','gateway','WARN','current qps=4200 threshold=3000','gateway‑58f7‑mz8k7'),
('2026-10-08 09:14:45','user-service','ERROR','get connection from pool no free connection','user‑68bc‑vqz9l'),
('2026-10-08 09:15:10','user-service','ERROR','database connection pool exhausted','user‑68bc‑vqz9l');