Statusok 是一款基于Go语言开发的轻量级的信息监控工具,基于c/s模式,定期由客户端发送http请求,支持多类信息通知客户端的api监控,配合InfluxDb+Grafana,可以达到快速部署一个简单的HTTP站点监控应用的目的!
Grafana: 用于分析和监控的开放平台,数据可视化和监控,支持Graphite,InfluxDB,Prometheus,Elasticsearch和更多数据库
InfluxDB是一个由InfluxData开发的开源时序型数据库,具有跨OSS,云和企业产品的通用API的可编程性和高性能,可为您提供高粒度,高规模和高可用性。它由Go写成,着力于高性能地查询与存储时序型数据;InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
概述
服务端的日志收集方案有Elastic Stack,如果是在运维无法短时间内快速部署整套环境,仅想对指定URL进行简单监控,可以考虑下基于C/S模式的监控方式。
1. StatusOK
1.1. StatusOK大体的设计思路
主main进程中创建:
- 【requestChannel】:
listenToRequestChannel
goroutine,做后台请求执行的通道,通过信号量throttle
做了并发限制; - 通过for循环,为Config配置中每一个HTTP请求,创建一个时钟
createTicker
goroutine; - 每个时钟
createTicker
Goroutine,通过for循环进行Select时钟信号监听,当内部时钟Ticket发过来的消息,发送对应的消息到【requestChannel】,让listenToRequestChannel
开始请求工作;
请求方法,PerformRequest
:
针对通道传递过来的消息,开始执行HTTP请求操作,将对应的请求正确或错误的记录,通过InfluxDB Go客户端,写入至InfluxDB数据库中,以提供Grafana进行读取进行数据呈现!
1.2. 通过Golang自行构建中statusok的一些问题
- mailgun_notify.go,负责通知的包中,,发现该应用代码不太健壮(消息通知的功能构建前,建议先禁用);
- requests.go,负责请求的方法中,相关命名不是很规范,诸如配置文件中的ResponseTime代表timeout的含义;
- database.go,负责InfluxDB信息插入的中,重复代码片段过多
- influxdb.go,负责InfluxDB的客户端包不兼容,原InfluxData团队计划V2.0版本的客户端,原来InfluxDBV1.0的仓库被移除
- mailgun_notify.go,负责邮件通知的接口已升级,对应的send()方法存在问题
1.3. 安装statusok
Statusok 是一款基于Go语言开发的轻量级的信息监控工具,基于c/s模式,定期由客户端发送http请求,支持多类信息通知客户端的api监控,配合InfluxDb+Grafana,可以达到快速部署一个简单的HTTP站点监控应用的目的!
从您的计算机监控您的网站和API,当服务器关闭或响应时间超过预期时,通过Slack,电子邮件通知。
|
|
1.4. StatusOK弊端和优势
1.4.1. 弊端
- 由于StatusOK是基于客户端-CS模式的,在监控方面会受客户端本地网络环境影响较大,比如国内外网络波动等;
- 相关数据受CDN的缓存影响、WAF防火墙等因素,可能引发监控不稳定(比如请求被云WAF拦截)
- 针对大型post数据模拟这些比较繁琐
- 行为模拟客户端请求,如果服务器接口升级,也需要对应更新
- 请求受限于HTTP的路由和负载均衡策略
1.4.2. 优势
- StatusOK可以不受服务器运维环境的限制,可以在开发、测试等本地环境方面快速部署起来,做到最基本的监听;
- 一些针对服务器环境rt时间很短,但客户反馈等待时间较长的,可以做一些区域试点监控;
- 快速监控实现,针对简单的URL资源进行监控,可以考虑做一版客户端监控,整体搭建较为轻量级;
2. grafana
2.1. 安装grafana
Grafana: 用于分析和监控的开放平台,数据可视化和监控,支持Graphite,InfluxDB,Prometheus,Elasticsearch和更多数据库
基于Docker安装1
可以使用语法GF_(GF_<SectionName>_<KeyName>
)使用环境变量覆盖conf/grafana.ini
中定义的所有选项;同时,重新设置了环境变量后,需要重启容器!
2.2. 单一docker容器运行
|
|
2.3. 配置路径
启动Grafana Docker容器时,以下设置是硬编码的,只能使用环境变量覆盖;或者通过Copy到镜像中自行Build;
Setting | Default value | 说明 |
---|---|---|
GF_PATHS_CONFIG | /etc/grafana/grafana.ini | 主配置文件 |
GF_PATHS_DATA | /var/lib/grafana | 数据存储路径 |
GF_PATHS_HOME | /usr/share/grafana | 软件安装路径 |
GF_PATHS_LOGS | /var/log/grafana | 日志 |
GF_PATHS_PLUGINS | /var/lib/grafana/plugins | 插件 |
GF_PATHS_PROVISIONING | /etc/grafana/provisioning | - |
2.4. 使用绑定挂载的Grafana容器,注意权限问题
|
|
3. influxDB
3.1. 安装和部署influxDB
目前,主分支现在代表InfluxDB 2.0,目前仅有1.x的客户端,2.0的API的Go客户端还在筹划中!
最新的InfluxDB 1.x是稳定版本,推荐用于生产。InfluxDB 2.0(主分支中的内容)目前处于alpha阶段。
3.2. 单一docker容器运行
暴露出来的8086,提供REST的HTTP请求操作!
|
|
3.3. docker-composer.yml
docker-composer.yml
将grafana与influxdb进行了融合,暂未将statusOK放入进去,这块后续计划将自己DockerFile
那块再单独去实现!
user: "501"
,是因为文末的502网关问题,主要是grafana在操作/var/lib/grafana
时候没有权限!
|
|
4. 其他
4.1. 补一张图
4.2. 问题:Network Error: Bad Gateway(502)
在Docker中通过Bind挂载方式对宿主机器和容器进行数据共享,需要保证Granafa的账号权限与宿主机器一致