天天看点

[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据

作者:一飞开源
一飞开源,介绍创意、新奇、有趣、实用的免费开源应用、系统、软件、硬件及技术,一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区,共建开源新生态!

一、开源项目简介

Frostmourne是汽车之家经销商技术部监控系统的开源版本,用于帮助监控几乎所有数据库数据(包括Elasticsearch, Prometheus, SkyWalking, MySql 等等)。如果你已经建立起了日志系统, 指标体系,却苦恼于没有一个配套监控系统,也许它能帮到你。使用本系统得当,至少可以做到线上应用出了什么问题,相关开发能第一时间了解报错情况,知道问题出在哪里, 可以快速响应处理,几乎先于所有人知道线上的情况,也因为心中有数所以可以从容应对各种问询,一点都不慌,你们团队值得拥有。

二、开源协议

使用MIT开源协议

三、界面展示

功能截图展示

  • 报警消息
[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据
  • 数据源管理
[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据
  • 数据名管理
[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据

对于Elasticsearch数据源来说,数据名等同于索引的概念

  • Elasticsearch数据查询
[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据

配置完数据源和数据名,你就可以用查询页面验证数据配置是否正确了。

  • 新增或编辑监控
[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据
  • HTTP数据监控

以监控Elasticsearch集群健康状态为例。

[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据

检测条件为:集群状态字段status不为green,或者集群节点数量不等于11

[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据
  • 监控列表
[开源]MIT协议,日志监控系统,用于帮助监控几乎所有数据库数据

监控保存成功后,就可以在监控列表里看到了

四、功能概述

项目初衷

在用ELK建立起日志系统之后,我们发现应用日志监控这块除了ElastAlert之外,没有其他方案。我们初期使用ElastAlert来解决日志监控的问题, 但是随着配置的增加,不仅管理成本和使用成本较高,稳定性方面也不能让我们满意,所以为了更好的易用性,稳定性,我们决定自己做一套简单的监控系统, 来解决日志监控的问题。

项目并不局限于Elasticsearch数据,还支持HTTP, PING, Telnet监控,Prometheus, SkyWalking, InfluxDB,MySQL, ClickHouse, IoTDB, SqlServer数据监控, 后面还会加入更多的常用数据源(如:Loki, MongoDB, Redis, Oracle 等)纳入监控范畴,需要做的东西还有很多,需要更多相关开发加入进来,欢迎联系我们,一起做大做强。

✨主要功能

  • 只需要写一条数据查询就可以轻松搞定监控
  • 多种数据源支持:Elasticsearch, HTTP, SkyWalking, Prometheus, InfluxDB, MySQL/TiDb, ClickHouse, SqlServer, PING, IotDB, Telnet
  • 数值计算类型监控:count, min, max, avg, sum, unique count, percentiles, standard deviation; Elasticsearch数据支持分桶
  • 多种报警消息发送方式:钉钉(机器人)、企业微信(机器人)、飞书机器人、Email、短信、HTTP
  • 多种消息格式:text, markdown
  • 灵活的报警消息Freemarker模板定制,支持变量占位符;消息模板管理
  • 分布式调度实现,每个监控都是独立调度,互不影响
  • 报警消息附带日志查询短链接,直达报警原因
  • 数值同比,环比监控
  • HTTP数据监控, Javascript表达式判断是否报警; PING连通监控, Telnet端口连通监控
  • 前端简单易用:监控管理、测试、另存、执行日志和历史消息
  • Elasticsearch数据查询、分享和下载
  • 报警消息抑制功能,防止消息轰炸;也有报警升级功能,避免故障相关方长时间得不到通知。
  • 自带账号,团队,部门信息管理模块,也可自己实现内部对接
  • 集成LDAP登录认证
  • 权限控制,数据隔离,各团队互不影响

五、技术选型

快速启动

提供docker-compose方式,让你更快运行起来便于更好理解项目作用。详细请看文档:Quick-Start

部署

预备环境准备:MySQL数据库表创建

Frostmourne所有表的创建语句都在 frostmourne.sql 文件中。

数据库密码默认使用明文,没有加密策略。如果你需要对密码进行加密,请参考druid官方文档:druid数据库密码加密

一、k8s部署方式

k8s部署参考以下三个配置文件

  • frostmourne-monitor-namespace.yaml
  • frostmourne-monitor-deployment.yaml
  • frostmourne-monitor-service.yaml

相关参数在 frostmourne-monitor-deployment.yaml 文件里配置。需要注意的是在frostmourne-monitor-service.yaml里指定对外映射端口,默认nodePort=30054

kubectl applt -f frostmourne-monitor-namespace.yaml
kubectl applt -f frostmourne-monitor-deployment.yaml
kubectl apply -f frostmourne-monitor-service.yaml           

二、zip包部署方式

依赖环境

  • JDK 1.8
  • MySQL 5.7.8+

最新的Release版本zip包,请到 releases 中下载,解压后然后根据自己的环境修改应用配置文件application.properties文件和环境变量配置文件env,然后执行如下命令启动:

./scripts/startup.sh           

执行如下命令停止应用:

./scripts/shutdown.sh           

三、自构建部署方式

依赖环境

  • JDK 1.8
  • Maven 3.2.x+
  • MySQL 5.7.8+

在项目frostmourne主目录下执maven构建命令:

mvn -U clean package -DskipTests=true           

前端项目frostmourne-vue会自动把资源构建到frostmourne-monitor的resources/dist下,所以你只需要部署frostmourne-monitor即可。

frostmourne-monitor已经配置了assembly打包,target目录下会生成zip包,你只需要将zip包解压,然后根据自己的 环境修改应用配置文件application.properties文件和环境变量配置文件env,然后执行如下命令启动:

./scripts/startup.sh           

执行如下命令停止应用:

./scripts/shutdown.sh           

功能使用指南

详细内容请查看 README.md 文档。

Elasticsearch数据监控指南 HTTP监控使用说明 Prometheus数据监控指南
SkyWalking数据监控指南 MySQL/TiDB数据监控指南 ClickHouse数据监控指南
InfluxDB数据监控指南 PING监控指南 数值同比监控使用指南
消息模板配置 报警发送 报警抑制
用户管理和登录认证 注意事项 其他
数值环比监控使用指南 iotdb数据监控使用指南 telnet端口连通监控指南

开发调试

调试环境要求

  • JDK 8 ~ 14
  • Node 16.14.2 (推荐)
  • Yarn 1.22.10 (推荐) 或 Npm 8.7.0
  • MySQL 5.7.8+
  • Elasticsearch 6.3.2+

启动frostmourne-monitor项目, 启动参数增加:

-Dmysql.host=localhost -Dmysql.user=root -Dmysql.password=example -Dlog.console.level=INFO
           

MySQL相关参数修改为自己环境的,active profile设置为local, 测试地址: http://localhost:10054 使用VS Code打开frostmourne-vue目录,进行前端调试。执行如下命令:

# install dependency
yarn install

# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
yarn install --registry=https://registry.npm.taobao.org

# develop
yarn dev           

会自动打开: http://localhost:9528

搭建本地开发调试环境或者需要做二次开发遇到什么困难的都可以加群沟通,欢迎各路英雄多多PR

技术说明项目基于Java8实现,详细请看:技术说明

⚙后续规划

  • 发布1.0-RELEASE
  • 增加本项目内程序日志采集至MySQL并提供查询页面,方便排查问题和监控
  • Elasticsearch数据名增加kibana链接配置,在数据查询页面增加kibana地址跳转链接,方便将数据查询切换至kibana
  • 短信报警方式实现,默认用阿里云短信实现
  • 增加阿里云日志数据监控
  • 增加腾讯云日志数据监控
  • 增加华为云日志数据监控
  • 完成英语国际化
  • 增加 loki 数据监控报警
  • 增加邮箱在线配置页面功能
  • 增加企业微信在线配置页面功能
  • 将短链接id以16进制格式展示,解决id数字很大的时候较长的问题
  • pom优化
  • 员工换组增加是否迁移监控至新组的选项,如果勾选将该员工创建的监控也转移至新组
  • 增加报警组支持
  • Elasticsearch数据名增加traceid字段配置,可以配置跳转链接。例如: 配置skywalking的链接将跳转到skywalking对应的调用链
  • 增加时序数据历史数据比较规则
  • 监控增加报警消息允许发送时间段设置,非允许发送时间段内消息将只记录不发送,发送状态为FORBID
  • 增加企业钉钉发消息默认实现(本地没有环境,需要帮助,欢迎PR,或者提供示例代码,先行谢过)
  • 更多报警方式补充(欢迎PR)
  • 增加 skywalking Database Layer 数据监控报警支持
  • 监控列表增加一个开关选项,只显示我的监控
  • Elasticsearch数据名配置时自动提示索引名称
  • 引入对象迭代器,迭代器代表从数据源中得到一个List数据列表,或者自定义输入;用于动态生成监控查询语句,例如: Level: ERROR AND Project: ${ITEM_VALUE};达到数据遍历监控的效果;
  • 发布1.0-RELEASE
  • 3-sigma离群点检测报警规则
  • 加入时序数据异常检测算法规则(需要实验可行性 基于时间序列的异常检测)
  • 总结项目用到的知识点

六、源码地址

访问一飞开源:https://code.exmay.com/

继续阅读