好久没写文章了,刚好最近用了一个开源的监控服务,感觉蛮有意思的,记录一下
(一)安装
uptime-kuma安装方式有几种,这里当然是选择大家都爱的docker,一条命令搞定
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
PS一下:
上面的 -v uptime-kuma:/app/data 其实干了两件事,一是创建数据卷uptime-kuma(docker volume create uptime-kuma),至于卷的位置可以(docker volume inspect uptime-kuma)查看,当然一般的话我会指定本地目录,像下面这样,还有就是将该数据卷映射到容器/app/data目录下
docker run -d --restart=always -p 3001:3001 -v /root/docker/uptime-kuma/:/app/data --name uptime-kuma louislam/uptime-kuma:1
#当然这里也可以做目录映射,我感觉我好废话啊
这是项目的github地址
https://github.com/louislam/uptime-kuma
(二)监控docker容器
具体的使用方法就不细讲了,主要简单的说一下怎么对docker容器进行监控
这里一般有两种配置方法,第一种是使用docker socket实现对容器的监控,这个最简单,但需要将/var/run/docker.sock(/run/docker.sock也行)挂在uptime-kuma的容器下,否则uptime-kuma无法使用/var/run/docker.sock监控容器
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data -v /run/docker.sock:/run/docker.sock --name uptime-kuma louislam/uptime-kuma:1
监控类型选择docker容器,输入待监控的docker 容器的id,这里选择监控uptime-kuma自己
然后是配置docker宿主信息,这里选择连接方式为socket,然后在守护进程的位置填入docker socket的位置,一般都只在/var/run/docker.sock下(填/run/docker.sock也行),点击测试,连接成功后就会出现右下角的连接成功
最后保存,就可以了
第二种方法就是通过开放docker远程api的方式(也就是tcp的连接方式)去监控docker容器的状态,这个方法的好处就在于可以监控不同服务器上的docker容器,一般这个时候都会有个但是,但是开放docker远程api会很危险,一定要注意,因为开放后,就意味着别人可以通过tcp请求直接远程控制你的docker,这非常的危险,别问我为什么知道,因为我就这么干了,然后服务器就中毒了被用来挖矿,docker直接就成了毒窝,所以直接开放docker远程api这么干很危险,很危险,很危险(说三次),那我就是想开放这么办,我就是想监控其他服务器上的docker容器。方法是有的,我想了几个方法
- 修改docker默认的远程的api端口
- 端口不对外开放,组个内网(可配合方法1使用)
- 其实前两个还是不安全,虽然这个api没有用户密码,但是它可以使用证书认证。但之即使你把证书认证配置好了(搜索docker远程api证书认证就有了),但是uptime-kuma的配置页面并没有指定宿主机docker远程api证书的选项,当然也有可能是我没找到,所以还是组个内网吧,端口不对外开放
下面是具体的配置(非证书认证版)
首先。需要在/etc/docker/ 目录下编辑daemon.json文件,添加如下内容
#我的daemon.json里本来就有"registry-mirrors":["https://selwkcml.mirror.aliyuncs.com"],所以这里你只需要在你的daemon.json追加"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]就好了,还有就是如果你的daemon.json有其他内容,一定不要忘记配置项后面的逗号
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
"registry-mirrors":["https://selwkcml.mirror.aliyuncs.com"]
}
完成上的步骤后,使用systemctl edit docker.service编辑/etc/systemd/system/docker.service.d/override.conf文件,一般给文件都是空的,要不就全都被注释了,添加如下内容
[Service]
#The blank ExecStart is required to clear the current entry point
ExecStart=
#Replace the existing ExecStart but only remove the properties that you have added into the daemon.json file, leave all else the same.
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
如果一直保存失败,可能是因为/etc/systemd/system/下没有docker.service.d目录,可以手动建一个docker.service.d目录,然后编辑override.conf文件,搞定后重启docker进程
systemctl restart docker.service
然后在uptime-kuma上配置,保存就ok了
PS:使用docker远程api就不需要/var/run/docker.sock将挂载到uptime-kuma下,还有最后就是开放2375端口,我的建议是,最好不要开放端口,要不然就在内网内,还有就是证书鉴权
这里贴一下我的博客,记录了因为开放docekr远程api而被攻击的这件事,写的比较烂,hh
传送门
要不是被攻击了,这篇文章在上周就发了,该死的黑客,不过我也知道他的服务器ip了,而且他的redis还没有密码,看能不能想办法干他一炮
还有就是随着对docker使用,我感觉docker是真香阿,比如说这个监控服务,还有就是我的博客halo,用的也是docker,还有就是用docker搭建聊天服务,在线云盘等等等…,还有公司业务现在也全都跑在docker上,香,真香
最后的最后,uptime-kuma除了监控docker容器,他还可一监控http,tcp,ping,grpc,dns,steam游戏服务器,mqtt,redis,mysql等等,还有各种通知告警方式,这里就直接贴图吧,唯一的遗憾,真的只能监控,hh
(三)结语
如果有什么错误的地方,还请大家批评指正。最后,希望小伙伴们都能有所收获。写这些,仅记录自己学习使用docker过程