LittleFox

  • 博客
  • 收藏
  • 关于
  • 订阅本站
LittleFox
Simple & Naïve
  1. 首页
  2. 挨踢
  3. 正文

Smokeping安装与主从配置

2022年12月20日 645点热度 2人点赞 2条评论

Smokeping是一款非常强大的网络监控工具,可以监控服务器到指定目标的延迟、丢包率等。Smokeping的配置坑极多,网上很多资料也有错误,以至于走了非常多的弯路,这里记录一下,给有需要的人参考。

不同系统和版本配置可能有所不同,仅在以下环境测试通过且可重复:

系统:Ubuntu 22.04

Smokeping版本:2.7.3-3

Web服务器:Caddy 2.6.2

Smokeping有standalone(单机)模式和Master/Slave(主从)模式,如果你只需要监控单个服务器,可以使用LinuxServer.io提供的Docker镜像,配置很简单,而且他们更新很勤奋,我只说主从模式的配置。

以下方法参考了极多的资料,可能有重复的操作,水平太菜见谅。

Master

安装Caddy

Smokeping默认会带Apache,但是Apache配置简直是天书,所以我一般都用更简单和轻量级的Caddy。

使用官方文档的方法。

$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
$ sudo apt update
$ sudo apt install caddy

安装fcgiwrap

sudo apt install fcgiwrap

fcgiwrap默认是www-data身份运行,我们使用Caddy而非Apache,所以最好改一下,免得遇到权限问题,编辑/lib/systemd/system/fcgiwrap.service,user改成caddy:

$ sudo sed -i 's/www-data/caddy/g' /lib/systemd/system/fcgiwrap.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable fcgiwrap.socket
$ sudo systemctl start fcgiwrap.socket

安装Smokeping

确实有一些可以使用主从模式的Docker镜像,但是我没找到好用的,而且这些镜像大多带Apache,比较占资源,所以我选择直接安装。Smokeping在Ubuntu的官方源中,所以不需要编译(很多过时教程中还需要编译和新建启动项)。官方源默认会安装Apache,但是用不到,我们使用--no-install-recommends选项,这样就可以只安装Smokeping。

$ sudo apt install --no-install-recommends smokeping

建立数据和缓存目录,配置各种目录的权限:

$ sudo mv /usr/share/smokeping/www/smokeping.fcgi.dist /usr/share/smokeping/www/smokeping.fcgi # 不同发行版的目录可能不同,另外有些没有dist后缀,就无需这一步
$ sudo mkdir -p /usr/share/smokeping/www/data
$ sudo mkdir -p /usr/share/smokeping/www/imgcache # 建立数据和缓存目录
$ sudo chown -R smokeping:smokeping /usr/share/smokeping
$ sudo chown -R caddy:caddy /usr/share/smokeping/www/imgcache # 修改权限
$ sudo chmod a+rx /etc/smokeping
$ sudo chmod a+r /etc/smokeping/config # 好像是为了让Caddy读到配置文件

配置Smokeping

编辑/etc/smokeping/config.d/General,修改cgiurl为你的域名/smokeping.cgi,注意前面改成https,因为我们后面要上ssl,<DOMAIN>代表你的域名,下同。

cgiurl    = https://<DOMAIN>/smokeping.cgi

编辑/etc/smokeping/config.d/pathnames,修改以下条目:

imgcache = /usr/share/smokeping/www/imgcache
imgurl   = imgcache
datadir  = /usr/share/smokeping/www/data
#dyndir = /usr/share/smokeping/www/data/__cgi

最后一项是注释掉的,这样smokeping会使用datadir作为dyndir,否则可能有权限问题。

编辑/etc/smokeping/smokeping_secrets,添加密码,格式为hostname:secret,hostname必须和/etc/smokeping/config.d/Slaves中一致,一行一个,这个文件的owner默认是smokeping:www-data而非caddy,不过不影响运行。

根据需要编辑Smokeping的配置文件,包括Slaves、Targets、Probes等,具体看文档,这里不赘述了,需要注意的是这些文件(也包括smokeping_secrets)中Slave端的hostname必须一致,而且必须和Slave服务器实际的hostname一致,Probes中的探针名和Targets中也必须一致(如果对应探针没有安装,需要安装一下)。

然后修改/etc/smokeping/basepage.html,Ubuntu 22.04库中的这个文件是错误的,会导致网页排版混乱,Ubuntu 20.04的反而正常,我不知道是不是因为对应的Apache配置改了,但是使用Caddy的话这里是需要修改的。修改文件的第7、8行,把href="/smokeping/css/smokeping-print.css"改成href="/css/smokeping-print.css"。

之后重启smokeping,让它生成rrd文件。

配置权限

我想说Smokeping一大半的坑都在主从的权限上¯\_(ツ)_/¯。前面的一堆chown和chmod都是为了解决权限问题,至此运行不报错了,但是如果停在这步,之后看图表你会发现只有本机数据可以显示,这是因为Slave端的请求是由Caddy接收的,而caddy进程的用户是caddy,它无权修改rrd文件,官方FAQ给出了更优雅的解决办法,但是我还是遇到了权限问题(当时是Ubuntu 20.04),所以用了更加简单粗暴的方法调整权限:

$ sudo usermod -aG caddy smokeping
$ sudo usermod -aG smokeping caddy
$ cd /usr/share/smokeping
$ find . -type d | xargs sudo chmod 775
$ find . -type f -name '*.rrd' | xargs sudo chown smokeping:caddy

之后重启Smokeping

$ sudo systemctl restart smokeping

配置Caddy

编辑/etc/caddy/Caddyfile,配置如下:

<DOMAIN> {
    handle /js/* {
        root * /usr/share/smokeping/www/
        file_server
    }
    handle /css/* {
        root * /usr/share/smokeping/www/
        file_server
    }
    handle /imgcache/* {
        root * /usr/share/smokeping/www/
        file_server
    }
    handle /images/* {
        root * /usr/share/smokeping/www/
        file_server
    }
    handle {
        root * /usr/share/smokeping/www
        reverse_proxy unix//var/run/fcgiwrap.socket {
            transport fastcgi {
                env SCRIPT_FILENAME /usr/share/smokeping/smokeping.cgi
                split ""
            }
        }
    }
}

ssl之类的Caddy会自动处理。这里因为需要用多个file_server,所以必须使用handle语句。

之后重启Caddy:

$ sudo systemctl restart caddy

此时访问域名,应该就能够正常看到图表了。

之后建议重启一下全部Slave端的smokeping进程,好像理论上不需要,但是之前遇到过问题,重启之后解决了。

Slave

[可选]先改一下hostname,上面说了这个hostname必须和Master端的Slaves文件一致,并且不同Slave不能重复。

$ sudo hostnamectl set-hostname <HOSTNAME>

之后重新登录ssh就可以看到了。

Slave端配置就比较简单了,还是使用官方源安装。

$ sudo apt install --no-install-recommends smokeping

编辑/etc/smokeping/smokeping_secrets,把密码写进去,需要和Master端的smokeping_secrets一致。

然后需要修改服务项为Slave模式:

$ sudo mkdir /etc/systemd/system/smokeping.service.d
$ sudo cp /usr/share/doc/smokeping/examples/systemd/slave_mode.conf /etc/systemd/system/smokeping.service.d

然后添加Master的域名,修改上面的slave_mode.conf,可以用sed(如果你看不懂这个命令就用vi改):

$ sudo sed -i 's/http:\/\/127.0.0.1\/smokeping.fcgi/https:\/\/<DOMAIN>\/smokeping.cgi/' /etc/systemd/system/smokeping.service.d/slave_mode.conf

重载:

$ sudo systemctl daemon-reload
$ sudo systemctl start smokeping
$ sudo systemctl enable smokeping

然后等待15分钟左右,Master端的网页就会显示图表了。

如果不显示且日志查不出问题,则查看Master服务器的各个rrd文件,如果修改时间一直不变,那么还是权限问题。

添加Slave

如果smokeping已经运行起来了,需要添加新的Slave,可以如下操作。

首先要编辑Master端的配置文件,因为Slave要收到Master的回复后才会运行,否则会报ERROR: we did not get config from the master。需要编辑的文件包括/etc/smokeping/smokeping_secrets(加入hostname和secret)、/etc/smokeping/config.d/Slaves(加入hostname和显示颜色)和/etc/smokeping/config.d/Targets(加入hostname),注意三者的hostname和Slave端的实际hostname要一致。

之后重启Master端的smokeping,生成rrd文件

$ sudo systemctl start smokeping

然后修改rrd文件权限,再次重启生效

$ cd /usr/share/smokeping/www/data
$ find . -type f -name '*.rrd' | xargs sudo chown smokeping:caddy
$ sudo systemctl start smokeping

然后按照上面说明安装配置Slave端,就可以正常运作了,同样需要等15分钟左右才可以看到曲线。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: smokeping VPS 原创 建站
最后更新:2023年1月22日

Fox

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

  • devin

    配置caddy后smokeping主页能显示,但是点击“Local”后提示“ERROR: creating /usr/share/smokeping/www/imgcache/Local: No such file or directory”

    2023年3月15日
    回复
    • Fox

      @devin 检查一下/usr/share/smokeping/www/imgcache/Local的owner,我这里正常运行的目录owner是caddy:caddy

      2023年3月22日
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    回复 devin 取消回复

    公告

    由于主题和插件冲突,暂时关闭了评论的第三方登录功能。

    分类
    • 挨踢 / 45篇
    • 日常 / 2篇
    • 随想 / 8篇
    • 默认分类 / 1篇

    COPYRIGHT © 2023 littlefox.me. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang