基于 Go 语言开发的监控系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 基于 Go 语言开发的监控系统

介绍

小米开源的监控系统 open-falcon 和滴滴开源的日志采集工具 falcon-log-agent 作为一组黄金搭档,被互联网公司广泛使用。

本文介绍怎么使用这组黄金搭档监控业务系统的日志。

open-falcon

open-falcon 使用 Golang 和 Python 开发,其中 Python 主要开发的是 Dashboard。

限于篇幅,本文不准备介绍 open-falcon 的原理,仅介绍如何安装。

安装 open-falcon 之前,必须确保已成功安装 Redis 和 MySQL,因为 open-falcon 需要使用这两个存储组件。

同时,我们还需要确保已成功安装 Golang 和 Python。

需要注意的是,我们还需要确保已设置 $GOPATH$GOROOT 环境变量(也可以使用默认值)。

安装 open-falcon :

下载源码和初始化数据库

mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/falcon-plus.git
cd $GOPATH/src/github.com/open-falcon/falcon-plus/scripts/mysql/db_schema/
# 初始化数据库
mysql -h 127.0.0.1 -u root -p < 1_uic-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 2_portal-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 3_dashboard-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 4_graph-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 5_alarms-db-schema.sql

编译

cd $GOPATH/src/github.com/open-falcon/falcon-plus/
# make all modules
make all
# make specified module
make agent
# pack all modules
make pack

在执行 make pack 之后,我们得到一个压缩包 open-falcon-vx.x.x.tar.gz

如果我们想要修改每个模块的配置文件,在执行 make pack 之前,我们可以修改模块的 config/xxx.json

需要注意的是,模块的配置文件中,MySQL 的账号和密码,默认分别是 root 和空,如果我们的 MySQL 账号和密码与之不同,我们需要编辑模块的配置文件进行修改。

部署

我们可以将得到的压缩包解压缩到指定目录进行部署,例如:

make ~/open-falcon
tar -zxvf open-falcon-vx.x.x.tar.gz -C ~/open-falcon

启动所有模块

cd ~/open-falcon
./open-falcon start
# 检查模块状态
./open-falcon check

安装仪表盘

在安装 Dashboard 之前,我们需要先安装依赖项:

# Centos
yum install -y python-virtualenv
yum install -y python-devel
yum install -y openldap-devel
yum install -y mysql-devel
yum groupinstall "Development tools"
# Ubuntu
apt-get install -y python-virtualenv
apt-get install -y slapd ldap-utils
apt-get install -y libmysqld-dev
apt-get install -y build-essential
apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev

安装 Dashboard:

cd ~/open-falcon
git clone https://github.com/open-falcon/dashboard.git
cd dashboard
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt

需要注意的是,这里有一个 Bug,会导致无法在仪表盘注册账号(点击按钮无反应),需要将 falcon api 的端口号 18080 改为 8080

cd ~/open-falcon/dashboard
vim rrd/config.py
# 端口 18080 改为 8080
API_ADDR = os.environ.get("API_ADDR","http://81.70.201.193:8080/api/v1")

在启动 Dashboard 之前,我们再检查一下 open-falcon 的 api 模块是否已启动:

cd ~/open-falcon
./open-falcon check

启动 Dashboard:

$ cd ~/open-falcon/dashboard
$ ./control start

在浏览器中,打开 http://127.0.0.1:8081

03

falcon-log-agent

falcon-log-agent 不同于 ELK,它不是日志查看系统,而是日志计算系统。

它通过外挂式的日志采集方式,实时读取日志文件中的内容,实时计算,并将计算结果直接推送到 open-falcon。

它有几个限定条件,分别是要求日志必须包含时间,不支持文件软链接,日志时间必须有序。

安装 falcon-log-agent:

构建

make -p $GOPATH/src/github.com/didi && cd $_
git clone https://github.com/didi/falcon-log-agent.git
make build

修改配置文件

cd $GOPATH/src/github.com/didi/falcon-log-agent
cp cfg/dev.cfg cfg/cfg.json # 基础配置
cp cfg/strategy.dev.json cfg/strategy.json # 策略配置

部署

cd $GOPATH/src/github.com/didi/falcon-log-agent
make pack
mkdir ~/open-falcon/falcon-log-agent
tar -zxvf falcon-log-agent.tar.gz -C ~/open-falcon/falcon-log-agent

启动

cd ~/open-falcon/falcon-log-agent
./control start

检查

  • http://ip:8003/health 健康检查
  • http://ip:8003/strategt 查看生效策略

策略配置示例:

本文以 open-falcon 的 agent 模块的日志为例,介绍怎么配置一个新策略。

[
    {
        "id":10, # 多个策略,id 必须唯一
        "name":"agent send data count", # 对应 open-falcon 中的 metric(监控项)
        "file_path":"/root/open-falcon/agent/logs/agent.log", # 日志路径(支持动态路径)
        "time_format":"yyyy/mm/dd HH:MM:SS", # 时间格式
        "pattern":"Total=(\\d+)", # 匹配正则表达式
        "exclude":"", # 排除正则表达式
        "step":60, # 日志采集周期,单位秒
        "tags":{}, 对应 open-falcon 中的 tag
        "func":"cnt", # 日志采集方式,cnt、avg、sum、max、min
        "degree":6, # 精度
        "comment":"", # 备注
        "parse_succ":true
    }
]

重启 falcon-log-agent,我们在 Dashboard 中的 Couters 列表中可以看到 agent send data count

04

监控配置

我们介绍完 open-falcon 和 falcon-log-agent 的安装和启动。

已实现自动采集日志并将计算数据上报到 open-falcon,接下来,我们介绍针对日志数据怎么配置监控。

监控配置操作步骤:

  1. 创建用户组。
  2. 创建模板。
  3. 添加策略,其中 metric 对应 falcon-log-agent 策略配置文件中配置项的 name,max 是最大报警次数,P 是报警级别(<3:既发短信也发邮件,>=3:只发邮件),run 是策略生效时间(不填写代表全天生效),if 代表条件。
    告警条件支持函数如下:
  • all(#3) 最新 3 个点都满足阈值条件则报警。
  • max(#3) 最新 3 个点,最大值满足阈值条件则报警。
  • min(#3) 最新 3 个点,最小值满足阈值条件则报警。
  • sum(#3) 最新 3 个点,其和满足阈值条件则报警。
  • avg(#3) 最新 3 个点,其平均值满足阈值条件则报警。
  • diff(#3) 将最新 push 过来的点(被减数),与历史最新 3 个点(减数)相减,得到 3 个差,有一个差满足阈值条件则报警。
  • pdiff(#3) 将最新 push 过来的点(被减数),与历史最新 3 个点(减数)相减,得到 3 个差,再将 3 个差值分别除以减数,得到 3 个商值,有一个商值满足阈值条件则报警。
  • lookup(#2,3) 最新的 3 个点中有 2 个满足阈值条件则报警。
  1. 配置报警接收用户组。

05

总结

本文我们介绍了基于 Go 语言开发的开源监控系统和日志采集工具的安装和使用方式。

建议读者朋友们动手操作一遍,需要注意的是,尽量严格按照本文的目录结构操作。

推荐阅读:

参考资料:

  1. https://github.com/open-falcon/falcon-plus
  2. https://github.com/open-falcon/dashboard
  3. https://github.com/didi/falcon-log-agent


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
22 5
|
18天前
|
算法 安全 Go
Go语言中的加密和解密是如何实现的?
Go语言通过标准库中的`crypto`包提供丰富的加密和解密功能,包括对称加密(如AES)、非对称加密(如RSA、ECDSA)及散列函数(如SHA256)。`encoding/base64`包则用于Base64编码与解码。开发者可根据需求选择合适的算法和密钥,使用这些包进行加密操作。示例代码展示了如何使用`crypto/aes`包实现对称加密。加密和解密操作涉及敏感数据处理,需格外注意安全性。
38 14
|
18天前
|
Go 数据库
Go语言中的包(package)是如何组织的?
在Go语言中,包是代码组织和管理的基本单元,用于集合相关函数、类型和变量,便于复用和维护。包通过目录结构、文件命名、初始化函数(`init`)及导出规则来管理命名空间和依赖关系。合理的包组织能提高代码的可读性、可维护性和可复用性,减少耦合度。例如,`stringutils`包提供字符串处理函数,主程序导入使用这些函数,使代码结构清晰易懂。
63 11
|
18天前
|
存储 安全 Go
Go语言中的map数据结构是如何实现的?
Go 语言中的 `map` 是基于哈希表实现的键值对数据结构,支持快速查找、插入和删除操作。其原理涉及哈希函数、桶(Bucket)、动态扩容和哈希冲突处理等关键机制,平均时间复杂度为 O(1)。为了确保线程安全,Go 提供了 `sync.Map` 类型,通过分段锁实现并发访问的安全性。示例代码展示了如何使用自定义结构体和切片模拟 `map` 功能,以及如何使用 `sync.Map` 进行线程安全的操作。
|
22天前
|
监控 安全 算法
深度剖析核心科技:Go 语言赋能局域网管理监控软件进阶之旅
在局域网管理监控中,跳表作为一种高效的数据结构,能显著提升流量索引和查询效率。基于Go语言的跳表实现,通过随机化索引层生成、插入和搜索功能,在高并发场景下展现卓越性能。跳表将查询时间复杂度优化至O(log n),助力实时监控异常流量,保障网络安全与稳定。示例代码展示了其在实际应用中的精妙之处。
39 9
|
2月前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
60 12
|
2月前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
85 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
2月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
47 7
|
2月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
2月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
116 71