Docker/podman ps -a 查看容器状态STATUS:
Exited(其他数字):容器异常退出,需要通过log 查看原因
Up(unhealthy):容器监听异常
2.1 通过docker run或者dockerfile添加健康检查
docker run --name=nginx --health-cmd="curl --silent --fail localhost/ || exit 1" --health-inter-val=30s --health-retries=3 --health-timeout=10s --start-period=60s nginx:latest
--interval:两次健康检查的间隔,默认为 30 秒
--timeout: 健康检查超时时间,,默认 30 秒
--retries: 连续失败次数,默认 3 次。
--start-period: 启动的初始化时间,默认 0 秒
--health-cmd: shell和exec 格式,取命令的返回值结果
docker/podman inspect --format '{{json .State.Health}}' 容器名| python -m json.tool
输出healthy表示健康,用户可以编写脚本监控容器状态做报警
可以通过docker stats查看容器的cpu, 内存,网络,IO的使用情况
这里主要介绍prometheus+grafana+cadvisor
prometheus通过node-exporter收集node主机的信息
可以看到up状态和unhealthy状态的node节点主机
Unhealthy表示node节点node-exporter异常
Prometheus是一款强大的第三方工具,除了docker容器监控,还支持mysq,数据仓库,Hadoop,k8s 等开源系统
Google的开源cadvisor,帮助收集,监听容器的status和数据,主要是CPU, 内存,FS,网络等usage
Grafana作为展示prometheus和cadvisor的数据,也可以实现自定义规则报警。(可以去grafana官网搜寻需要监控的模板)
可以通过dashboard展示node主机上的所有容器
通过panel,metrics自定义需要收集的容器数据
通过自定义规则统计需要收集的容器数据,也可以统计宕机状态的容器
如果是大量的容器监控报警,建议使用alertmanager做报警
Docker的日志分为两类,一类是 Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志。容器日志可以理解是运行在容器内部的应用输出的日志。
默认情况下,docker logs显示当前运行的容器的日志信息,内容包含 STOUT(标准输出) 和 STDERR(标准错误输出)。日志都会以 json-file的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>-json.log
CRIO的日志,存放在/var/log/containers/
通过docker/podman logs命令查看容器的日志
docker/podman logs --since 60m容器名
docker/podman logs -t --since="" --until "" 容器名
建议:docker/podman run时候,日志文件-v到宿主机上,
docker/podman run -d --name xxx -v /opt/log:/log xxx:latest
通过elk去抓取宿主机上的日志,尽量不要通过docker logs去检查容器日志。
除了docker容器,本文也向大家介绍kubernetes的日常巡检。