debian配置smokeping的master,使用docker来配置slave端


[toc]


这篇主要讲的是使用debian+nginx来配置smokeping。

smokeping真是太他妈的难设置了,这里分享一下成功的经验。因为apache现在已经过时了,不想污染环境,然后还没有啥可以用的master端的docker。

ubuntu同理,都是debian系的。

创建一个新的用户,www

因为smokeping的权限设置很复杂,我也懒的看,直接设置一个www用户+组,权限也低,web服务一般都是这个服务

groupadd www
useradd -g www -s /sbin/nologin www

此时使用 id www 应该就能看到具体的权限信息。

安装依赖包

apt update

apt install wget curl gnupg2 ca-certificates dmidecode lsb-release -y

update-ca-certificates

apt install tar zip unzip openssl libssl-dev lsof git jq socat cron make gcc rrdtool librrds-perl spawn-fcgi traceroute zlib1g zlib1g-dev fonts-droid-fallback fping -y

下载并编译smokeping的源码

wget https://github.com/oetiker/SmokePing/releases/download/2.7.3/smokeping-2.7.3.tar.gz

tar xzvf smokeping-2.7.3.tar.gz

此时进入到源码目录,进行编译:

cd smokeping-2.7.3

./configure --prefix=/usr/local/smokeping

make install

此时smokeping的安装的目录就是放在看 /usr/local/smokeping 这个目录下了。

配置nginx

nginx的安装很简单:

apt install nginx

这样就行了, 一般通过这种方式安装的nginx,fastcgi_params的位置都在 /etc/nginx/fastcgi_params,如果是宝塔什么的,可以自己去找找。

此时先配置一下nginx
/etc/nginx/conf.d 里面创建一个新的conf,比如smokeping.conf

server {
    listen 80;
    listen [::]:80;
    listen 9006;
    server_name 你的域名;
    index index.html index.htm smokeping.fcgi;
    root /usr/local/smokeping/htdocs/;
    #error_page 404/404.html;

    location ~ .*\.fcgi$ {
        fastcgi_pass 127.0.0.1:9007;
        include /etc/nginx/fastcgi_params;
    }

    access_log /dev/null;
    error_log /dev/null;
}

这里有几个要注意的点:

  • 9006,这里是你暴露出来的端口,用来配置slave连接到master
  • fastcgi_pass 这里是反向代理,就是smokeping的web会运行的端口,等会会配置
  • 域名就写你解析的域名就ok了

配置smokeping

配置smokeping 的master的守护进程

/etc/systemd/system/smokeping-master.service 下写入

[Unit]
Description=Smokeping Service, Network Latency Graphical Viewer
After=network.service
Requires=spawn-fcgi.service

[Service]
Type=forking
Environment=CONFFILE=/usr/local/smokeping/etc/config
ExecStartPre=/usr/local/smokeping/bin/smokeping --check
ExecStart=/usr/local/smokeping/bin/smokeping --config /usr/local/smokeping/etc/config --debug-daemon
SuccessExitStatus=1

[Install]
WantedBy=default.target

这里的/usr/local/smokeping/etc/config 后面再配置,暂时先这么配置
此时可以看到,还需要一个 Requires=spawn-fcgi.service,接下来配置spawn-fcgi.service.

配置 spawn-fcgi.service的守护进程

/etc/systemd/system/spawn-fcgi.service

[Unit]
Description=Spawn-fcgi Service
After=network.service

[Service]
Type=forking
ExecStart=/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9007 -P /var/run/smokeping-fastcgi.pid -f /usr/local/smokeping/htdocs/smokeping.fcgi

[Install]
WantedBy=default.target

这里的9007 就是nginx那里的反代的端口,smokeping的端口就运行在这里了。
其余的配置等会再配置。

配置smokeping master的主配置文件

编辑 /usr/local/smokeping/etc/config

*** General ***

owner    = X
contact  = some@address.nowhere
mailhost = my.mail.host
imgcache = /usr/local/smokeping/htdocs/cache
imgurl   = cache
datadir  = /usr/local/smokeping/htdocs/data
piddir  = /usr/local/smokeping/htdocs/var
cgiurl   = http://some.url/smokeping.cgi
smokemail = /usr/local/smokeping/etc/smokemail.dist
tmail = /usr/local/smokeping/etc/tmail.dist
syslogfacility = local0


*** Alerts ***

to = alertee@address.somewhere
from = smokealert@company.xy

+someloss
type = loss
pattern = >0%,*12*,>0%,*12*,>0%
comment = loss 3 times  in a row


*** Database ***

step     = 10
pings    = 5


AVERAGE  0.5   1  1008
AVERAGE  0.5  12  4320
    MIN  0.5  12  4320
    MAX  0.5  12  4320
AVERAGE  0.5 144   720
    MAX  0.5 144   720
    MIN  0.5 144   720


*** Presentation ***

template = /usr/local/smokeping/etc/basepage.html.dist
charset = utf-8

+ overview 

width = 600
height = 200
range = 24h

+ detail

width = 600
height = 200
unison_tolerance = 2

"Last 5 Minutes"    5m
"Last 10 Minutes"    10m
"Last 30 Minutes"    30m
"Last 1 Hour"    1h
"Last 3 Hours"    3h
"Last 24 Hours"   24h
"Last 3 Days"    3d
"Last 7 Days"   7d
"Last 30 Days"    30d
"Last 1 Year"    1y


*** Probes ***

+ TCPPing
binary = /usr/bin/tcpping
forks = 5
offset = 50%
step = 10
timeout = 5

+ FPing
binary = /usr/bin/fping

*** Slaves ***

secrets=/usr/local/smokeping/etc/smokeping_secrets.dist

+ slave1
display_name = sg
location = sg
color = 0000ff


*** Targets ***

probe = TCPPing

menu = Top
title = Network Latency Grapher
remark = Welcome to this SmokePing website. <br />

+ mainland

menu = 大陆方向
title = 大陆方向
nomasterpoll = yes
host = /mainland/ct-gz~slave1 /mainland/ct-sh~slave1 

++ ct-gz

menu = 广州电信
title = 广州电信
slaves = slave1
host = 14.215.116.1

++ ct-sh

menu = 上海电信
title = 上海电信
slaves = slave1
host = 202.96.199.133
  • 这里的slave1 是你的slave从机的名字
  • /usr/local/smokeping/etc/smokeping_secrets.dist 这里要写好你你配置的slave的账号和密码

因为这里的Probe使用了tcpping,还是要指向一个程序的,虽然没啥用。

创建 /usr/bin/tcpping 这个程序

#!/bin/sh -e
#
# Copyright (c) 2016, Torbjörn Lönnemark <tobbez@ryara.net>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

if [ $# != 5 -a $# != 4 ]
then
    echo "Wrong number of arguments"
        exit
fi

output="$4 :"
for i in $(seq $3)
do
    portflag=""
    if [ $# = 5 ]
    then
        portflag="-p $5"
    fi
    tr=$(traceroute -n -T -f 255 -m 255 -q 1 -w 0.5 $portflag $4 2>&1| tail -n1 | sed 's/  / /g')
    if ! echo "$tr" | grep 'ms$' > /dev/null
    then
        output="$output -"
    else
        ms=$(echo "$tr" | cut -d" " -f3)
        output="$output $ms"
    fi
done
echo $output

复制进去,然后给一个可执行的权限
chmod +x /usr/bin/tcpping
就ok了,要不master会显示配置文件找不到这个二进制程序,当然你直接apt install 一个应该也是可以的

配置 slave的账号信息

就是配置 /usr/local/smokeping/etc/smokeping_secrets.dist 这里
加一行,格式:用户名:密码,比如:slave1:3c3c
同时给这个文件加一个权限 和设置用户组:

chmod 700 /usr/local/smokeping/etc/smokeping_secrets.dist

chown www:www /usr/local/smokeping/etc/smokeping_secrets.dist

配置rrdtool的缓存文件的文件夹

cd /usr/local/smokeping/htdocs
mkdir -p data var cache ../cache
mv smokeping.fcgi.dist smokeping.fcgi

各种启动

systemctl enable smokeping-master.service
systemctl start smokeping-master.service
systemctl enable spawn-fcgi.service
systemctl start spawn-fcgi.service

nginx -s reload

此时访问你的地址就可以看到了

放心,后面会给介绍一个可以做slave的docker,以后运行就会方便多了。

slave的docker设置

这个就简单多了

docker run -d -h slave的名字 --name 容器的名字 -e SLAVE_SECRET=slave的密码 -e MASTER_URL=http://网址/smokeping.fcgi -e PGID=0 -e PUID=0 -e TZ=Asia/Shanghai waf7225/smokeping-slave

主从记得同步时区:

timedatectl set-timezone Asia/Shanghai

解决中文字体问题

apt-get install fonts-wqy-zenhei

让后重启主机,是主机~

参考文档

使用腾讯云轻量应用服务器搭建网络质量拨测工具 SmokePing
smokeping-lnmp
smokeping监控平台安装和部署
Smokeping页面支持中文
idc_ping_monitor
smokeping 监控平台略解
smokeping-yum安装及TCP监测
人手一个Smokeping之 树莓派搭建Smokeping过程全记录