定时任务监控服务Healthchecks
今天是足不出戶的第 18 天
周六(4月16日)做了核酸,周日在家做的抗原,今天下午核酸。
居委會一早就通知,今天會發(fā)放第三批免費(fèi)物資,是蔬菜包來著,已經(jīng)有人看到在小區(qū)邊上卸貨了。
第一批政府免費(fèi)物資是 4 月 4 號發(fā)的,第二批是 4 月 16 日發(fā)的,今天是第三批,其實(shí)算上 4 月 10 日發(fā)的口罩、抗原和蓮花清瘟膠囊,今天是第四批免費(fèi)物資了。
太拖沓了,本文開始于 2021 年 12 月,上周才最終完成,看來要做定時(shí)任務(wù)來檢測未完成的文檔了🙂
什么是 Healthchecks ?
Healthchecks 是一項(xiàng) cron 作業(yè)監(jiān)控服務(wù)。非常適合 cron 作業(yè)和類似 cron 的系統(tǒng)(systemd 計(jì)時(shí)器、Jenkins 構(gòu)建作業(yè)、Windows 計(jì)劃任務(wù)、wp-cron、類似 uwsgi cron 的界面、Heroku 調(diào)度程序等)。當(dāng) ping 未按時(shí)到達(dá)時(shí),Healthchecks 會發(fā)出警報(bào)。
Healthchecks 帶有 Web 儀表板、API、25+ 個(gè)用于發(fā)送通知的集成、每月電子郵件報(bào)告、WebAuthn 2FA 支持、團(tuán)隊(duì)管理功能:項(xiàng)目、團(tuán)隊(duì)成員、只讀訪問。
準(zhǔn)備
用局域網(wǎng) IP 訪問雖然能看到主界面,但是登錄后會顯示跨域問題,官方文檔中 https://healthchecks.io/docs/self_hosted_docker 的 TLS Termination 章節(jié)寫了要求,但是沒給出具體配置
老蘇用 Nginx Proxy Manager 做了反代,準(zhǔn)備用域名 https://hc.laosu.ml 來訪問(你要準(zhǔn)備自己的域名,不是用老蘇的)
其中 http://192.168.0.197:8000 為群暉的 IP + Healthchecks 的端口
SSL 部分都勾選了
還需在 Advanced --> Custom Nginx Configuration 中填入下面的腳本,否則和在局域網(wǎng)訪問結(jié)果一樣
location / {proxy_pass http://192.168.0.197:8000;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto https;proxy_set_header Host $http_host;}安裝
在群暉上以 Docker 方式安裝。
在注冊表中搜索 healthchecks ,選擇第二個(gè) galexrt/healthchecks,版本選擇 latest。
如果需要最新的版本,只能用命令行 docker pull ghcr.io/galexrt/healthchecks:main 下載,因?yàn)檫@個(gè)鏡像自 v1.22.0 之后,不再推送到 Docker Hub
卷
在 docker 文件夾中,創(chuàng)建一個(gè)新文件夾,并將其命名為 healthchecks,再建一個(gè)子目錄 data,需要給 data 賦予 Everyone 用戶 讀寫權(quán)限
如果這一步?jīng)]做,會導(dǎo)致容器啟動時(shí) SQLite 數(shù)據(jù)庫創(chuàng)建失敗,最終引起 CPU 占用高居不下
| docker/healthchecks/data | /data | 存放數(shù)據(jù) |
端口
端口不沖突就行,不確定的話可以用命令查一下
# 查看端口占用 netstat -tunlp | grep 端口號| 2525 | 2525 |
| 8000 | 8000 |
環(huán)境
| 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 | 默認(rèn)是 True,改為 False |
TZ 記得要改為 Asia/Shanghai
DEBUG 記得要改為 False,否則 Web 界面的頂部會顯示 Running in debug mode, do not use in production.
更多的環(huán)境參數(shù)可以參考:https://hub.docker.com/r/galexrt/healthchecks/
運(yùn)行
在瀏覽器中輸入 https://hc.laosu.ml 就能看到主界面
創(chuàng)建用戶
要登錄還需要?jiǎng)?chuàng)建一個(gè) Healthchecks 超級用戶,需進(jìn)入終端機(jī)
方法:「終端機(jī)」 => 「新增」 => 「通過命令啟動」=> 「請輸入一個(gè)命令」=> 「sh」
執(zhí)行下面的命令
# 創(chuàng)建超級用戶 python3 /healthchecks/manage.py createsuperuser輸入郵件和密碼即可
添加項(xiàng)目
在瀏覽器中輸入 https://hc.laosu.ml ,用上一步創(chuàng)建的賬號登錄,默認(rèn)會把自己作為第一個(gè)監(jiān)控項(xiàng)目
通過 Add Check 可以添加您要監(jiān)控的單個(gè)服務(wù)
設(shè)置很簡單,而且右上角提供了在線幫助,點(diǎn) Docs 菜單隨時(shí)可以查閱
應(yīng)用
healthchecks 可用于提供監(jiān)測服務(wù),比如監(jiān)測 Docker 的監(jiān)控狀況。
例如:每 60 秒用 curl 檢測一次容器是否能在 10 秒內(nèi)回應(yīng)請求
下面是一段實(shí)現(xiàn)上面目的 docker-compose 示例:
- interval:Health check 時(shí)間間隔
- timeout:當(dāng) Health check 超過此設(shè)定的時(shí)間,則會視為失敗
- retries:當(dāng) Health check 連續(xù)失敗次數(shù)超過此設(shè)定時(shí),則會將狀態(tài)更改為 unhealthy
- start-period:設(shè)置容器啟動后應(yīng)忽略健康檢查的持續(xù)時(shí)間
【注意】:需要說明的是,鏡像 wbsu2003/webamp 本身在打包的時(shí)候并沒有打入 curl 命令,所以有兩個(gè)辦法:
重新打包鏡像,需要在 Dockerfile 中增加一行命令 RUN apk -U --no-cache add ca-certificates curl
進(jìn)入容器的終端機(jī),執(zhí)行 apk -U --no-cache add ca-certificates curl
老蘇用了第二個(gè)方法
添加 healthchecks 之后,用 docker ps 查看 STATUS 狀態(tài)會有標(biāo)識
如果要查看日志,可以用 docker inspect --format='{{json .State.Health}}' webamp
或者從 portainer 中查看
過一會兒,狀態(tài)會從 starting
轉(zhuǎn)變?yōu)?healthy
對于 unhealthy 的容器,
或者
可以采用 Docker Autoheal 來監(jiān)控和重啟,不過老蘇還沒開始研究。
參考文檔
healthchecks/healthchecks: A cron monitoring tool written in Python & Django
地址:https://github.com/healthchecks/healthchecks
Running 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-healthchecks
Garrit’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
總結(jié)
以上是生活随笔為你收集整理的定时任务监控服务Healthchecks的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot 微信-网页授权获
- 下一篇: 软件工程基础第一次作业