定时任务监控服务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 中填入下面的腳本,否則和在局域網訪問結果一樣
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 ,選擇第二個 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 | 存放數據 |
端口
端口不沖突就行,不確定的話可以用命令查一下
# 查看端口占用 netstat -tunlp | grep 端口號| 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 | 默認是 True,改為 False |
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」
執行下面的命令
# 創建超級用戶 python3 /healthchecks/manage.py createsuperuser輸入郵件和密碼即可
添加項目
在瀏覽器中輸入 https://hc.laosu.ml ,用上一步創建的賬號登錄,默認會把自己作為第一個監控項目
通過 Add Check 可以添加您要監控的單個服務
設置很簡單,而且右上角提供了在線幫助,點 Docs 菜單隨時可以查閱
應用
healthchecks 可用于提供監測服務,比如監測 Docker 的監控狀況。
例如:每 60 秒用 curl 檢測一次容器是否能在 10 秒內回應請求
下面是一段實現上面目的 docker-compose 示例:
- 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/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
總結
以上是生活随笔為你收集整理的定时任务监控服务Healthchecks的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot 微信-网页授权获
- 下一篇: 软件工程基础第一次作业