定时任务监控服务healthchecks
今天是足不出户的第 18 天
周六( 4 月 16 日)做了核酸,周日在家做的抗原,今天下午核酸。
居委会一早就通知,今天会发放第三批免费物资,是蔬菜包来着,已经有人看到在小区边上卸货了。
第一批政府免费物资是 4 月 4 号发的,第二批是 4 月 16 日发的,今天是第三批,其实算上 4 月 10 日发的口罩、抗原和莲花清瘟胶囊,今天是第四批免费物资了。
太拖沓了,本文开始于 2021 年 12 月,上周才最终完成,看来要做定时任务来检测未完成的文档了🙂
什么是 Healthchecks ?
Healthchecks
是一项cron
作业监控服务。非常适合cron
作业和类似cron
的系统(systemd
计时器、Jenkins
构建作业、Windows
计划任务、wp-cron
、类似uwsgi cron
的界面、Heroku
调度程序等)。当ping
未按时到达时,Healthchecks
会发出警报。
Healthchecks
带有 Web
仪表板、API
、25+
个用于发送通知的集成、每月电子邮件报告、WebAuthn 2FA
支持、团队管理功能:项目、团队成员、只读访问。
准备
用局域网 IP
访问虽然能看到主界面,但是登录后会显示跨域问题,官方文档中 https://healthchecks.io/docs/self_hosted_docker 的 TLS Termination
章节写了要求,但是没给出具体配置
老苏用 Nginx Proxy Manager
做了反代,准备用域名 https://hc.laosu.ml
来访问(你要准备自己的域名,不是用老苏的)
其中
http://192.168.0.197:8000
为群晖的IP
+Healthchecks
的端口
SSL
部分都勾选了
还需在 Advanced
–> Custom Nginx Configuration
中填入下面的脚本,否则和在局域网访问结果一样
1 | location / { |
安装
在群晖上以 Docker 方式安装。
在注册表中搜索 healthchecks
,选择第二个 galexrt/healthchecks
,版本选择 latest
。
如果需要最新的版本,只能用命令行
docker pull ghcr.io/galexrt/healthchecks:main
下载,因为这个镜像自v1.22.0
之后,不再推送到Docker Hub
卷
在 docker
文件夹中,创建一个新文件夹,并将其命名为 healthchecks
,再建一个子目录 data
,需要给 data
赋予 Everyone
用户 读写权限
如果这一步没做,会导致容器启动时
SQLite
数据库创建失败,最终引起CPU
占用高居不下
文件夹 | 装载路径 | 说明 |
---|---|---|
docker/healthchecks/data |
/data |
存放数据 |
端口
端口不冲突就行,不确定的话可以用命令查一下
1 | # 查看端口占用 |
本地端口 | 容器端口 |
---|---|
2525 |
2525 |
8000 |
8000 |
环境
可变 | 值 |
---|---|
DB_NAME |
/data/hc.sqlite |
SECRET_KEY |
YOUR_SECRET_KEY |
PING_EMAIL_DOMAIN |
hc.laosu.ml ,存疑 |
SITE_ROOT |
https://hc.laosu.ml ,有端口也要带上 |
EMAIL_HOST |
smtp.88.com |
EMAIL_PORT |
465 |
EMAIL_USE_TLS |
True |
EMAIL_HOST_USER |
wbsu2003@88.com |
EMAIL_HOST_PASSWORD |
YOUR_PASSWORD ,邮箱的第三方密码 |
ALLOWED_HOSTS |
localhost,* |
CONTAINER_PRUNE_INTERVAL |
缺省为 600 秒 |
DEBUG |
默认是 Ture ,改为 False |
- 系统支持
postgres
,mysql
,sqlite3
数据库,默认情况下使用SQLite
数据库;- 虽然设了邮箱,但老苏并没有验证过发邮件,
PING_EMAIL_DOMAIN
可能应该是要设为88.com
;
TZ
记得要改为 Asia/Shanghai
DEBUG
记得要改为 False
,否则 Web
界面的顶部会显示 Running in debug mode, do not use in production.
更多的环境参数可以参考:https://hub.docker.com/r/galexrt/healthchecks/
运行
在浏览器中输入 https://hc.laosu.ml
就能看到主界面
创建用户
要登录还需要创建一个 Healthchecks
超级用户,需进入终端机
方法:「终端机」 => 「新增」 => 「通过命令启动」=> 「请输入一个命令」=> 「sh」
执行下面的命令
1 | # 创建超级用户 |
输入邮件和密码即可
添加项目
在浏览器中输入 https://hc.laosu.ml
,用上一步创建的账号登录,默认会把自己作为第一个监控项目
通过 Add Check
可以添加您要监控的单个服务
设置很简单,而且右上角提供了在线帮助,点 Docs
菜单随时可以查阅
应用
healthchecks
可用于提供监测服务,比如监测 Docker
的监控状况。
例如:每 60
秒用 curl
检测一次容器是否能在 10
秒内回应请求
下面是一段实现上面目的 docker-compose
示例:
- 将第一个
URL
地址http://localhost:80
更改为您的应用程序的URL
。可以是容器内的地址、局域网地址、也可以是公网地址,老苏用了容器内部的地址;- 第二个
URL
地址https://hc.laosu.ml/ping/<UUID>
是healthchecks
实例的地址。这个可以在Healthchecks
中获得;
1 | version: "3" |
interval
:Health check
时间间隔timeout
:当Health check
超过此设定的时间,则会视为失败retries
:当Health check
连续失败次数超过此设定时,则会将状态更改为unhealthy
start-period
:设置容器启动后应忽略健康检查的持续时间
【注意】:需要说明的是,镜像 wbsu2003/webamp
本身在打包的时候并没有打入 curl
命令,所以有两个办法:
重新打包镜像,需要在
Dockerfile
中增加一行命令RUN apk -U --no-cache add ca-certificates curl
进入容器的终端机,执行
apk -U --no-cache add ca-certificates curl
老苏用了第二个方法
添加 healthchecks
之后,用 docker ps
查看 STATUS
状态会有标识
如果要查看日志,可以用
docker inspect --format='{{json .State.Health}}' webamp
或者从 portainer
中查看
过一会儿,状态会从 starting
转变为 healthy
对于 unhealthy
的容器,
或者
可以采用 Docker Autoheal
来监控和重启,不过老苏还没开始研究。
参考文档
healthchecks/healthchecks: A cron monitoring tool written in Python & Django
地址:https://github.com/healthchecks/healthchecksRunning with Docker - Healthchecks.io
地址:https://healthchecks.io/docs/self_hosted_docker/galexrt/container-healthchecks: Simple to use Container Image for https://github.com/healthchecks/healthchecks.
地址:https://github.com/galexrt/container-healthchecksGarrit’s Notes
地址:https://garrit.xyz/posts/2021-05-15-healthchecks-io-with-docker[Docker] Health Check and Restart Unhealthy Container | wshs0713’s blog
地址:https://wshs0713.github.io/posts/b8226bad/willfarrell/docker-autoheal: Monitor and restart unhealthy docker containers.
地址:https://github.com/willfarrell/docker-autoheal