网络延迟监控-smokeping

大点的公司的一般都有多个办公区、机房,有钱的公司一般都会购买专线、初创公司可能会采用公网链路,然后在不同办公区网络出口加上IP-SEC连通,由于距离较远,延迟可能会比较大,对于IT或者运维来说,兼容网络延迟就很有必要,有个很好用的网络延迟工具smokeping,安装、配置很简单,记录一下。

推荐使用docker进行安装,很简单5分钟即可完成。

    mkdir -p ~/smokeping/config ~/smokeping/data
    cd ~/smokeping
    docker run -d \
    --name smokeping \
    -p 8888:80 \
    -v ~/smokeping/config:/config \
    -v ~/smokeping/data:/data \
    linuxserver/smokeping

上面三条命令即可安装+启动smokeping服务,通过8888端口访问,http://127.0.0.1:8888/


以下重点介绍下配置文件,smokeping的config文件夹中文件如下:

  1. Presentation 用来配置web页面的一些配置,一般默认即可。

  2. Slaves 如果有主从节点,从这里配置

  3. Probes 一些探测程序的路径配置

  4. ssmtp.conf 如果要发送邮件报警,从这里配置smtp信息

  5. Alerts 报警规则配置,这个比较重要,用来定义什么情况下会触发报警,我的配置如下:

    *** Alerts ***
    to = |/config/send_notify.sh
    from = XX@XX.com
    
    +链路中断
    type = loss
    # in percent
    pattern = ==0%,==0%,==0%, ==U
    comment = 连接失败
    
    +严重丢包
    type = loss
    # in percent
    pattern = ==0%,==0%,==0%,==0%,>20%,>20%,>20%
    comment = 连续3次采样-丢包率超过20%
    
    +连续丢包
    type = loss
    # in percent
    pattern = ==0%,==0%,==0%,==0%,>0%,>0%,>0%
    comment = 连续3次采样-存在丢包
    
    +间歇性丢包
    type = loss
    # in percent
    pattern = >15%,*8*,>15%,*8*,>15%
    comment = 间断性丢包
    
    +Ping延迟(超100ms)
    type = rtt
    # in milli seconds
    pattern = <100,<100,<100,<100,<100,>100,>100,>100
    comment = 连续3次采样延迟增大-超过100ms

    上面的from、to用来配置报警的发送方和接受方,to可以配置一个邮箱地址,也可以配置一些脚本,用来将报警信息发送出去,我这里配置了shell脚本,用来将报警发送到钉钉群。

    send_notify.sh内容如下:

    #!/bin/bash
    
    # 解析变量
    alertname=$1
    target=$2
    losspattern=$3
    rtt=$4
    hostname=$5
    
    # 自定义变量
    ding_token="XXXXXXXXXXXXXX"
    echo "$(date +%F-%T)" >> /data/invoke.log
    
    # 网络恢复逻辑判断
    if ["$losspattern" ="loss: 0%" ];
    then
        subject="【恢复】-网络链路问题"
    else
        subject="【报警】网络链路问题"
    fi
    
    result="${subject}\n链路:XX ---> ${target}\n机器:${hostname}\n类型: ${alertname}\n详情: ${losspattern}\nping响应:${rtt}"
    echo $result >> /data/invoke.log
    echo $@ >> invoke.log
    
    curl "https://oapi.dingtalk.com/robot/send?access_token=${ding_token}" -H "Content-type: application/json" -d "{\"msgtype\": \"text\", \"text\": {\"content\" : \"${result}\"}}"
  6. Database 用来配置探测的频率

    step     = 120 //表示每120秒发起一轮探测
    pings    = 10 //表示每轮探测,对每个host共发出10次ping请求

    如果是上面的配置,也就是在2分钟内会对配置的每个地址检测10次,即12秒/次。注意:修改了探测频率之后,要删掉data目录中旧的rrd文件。

  7. General 一些通用配置,不改也无所谓

  8. Targets 最重要的具体监控项配置,在这里进行监控的host配置,以及启动的报警规则,如我的配置:

    *** Targets ***
    
    probe = FPing
    
    menu = Top
    title = 网络延迟监控
    remark = 延迟监控,如有问题联系XXX.
    
    alerts=链路中断,严重丢包,连续丢包,间歇性丢包,Ping延迟(超100ms)
    
    + InternetSites
    
    menu = 公网
    title = 公网
    
    ++ baidu
    menu = baidu
    host = baidu.com
    
    ++ yeetrack.com
    menu = yeetrack.com
    host = www.yeetrack.com
    
    + internal
    menu = 内部
    title = 内部
    
    alerts=链路中断,严重丢包,连续丢包,Ping延迟(超100ms)
    
    ++ beijing
    menu = beijing
    host = XX.XX.XX.XX

    上面一共配置了两大项,每个大项中配置了具体监控哪些ip地址。
    注意:报警规则在Alerts中配置之后,一定要在Targets中配置哪些监控启用哪些报警项,如果把alerts=链路中断,严重丢包,连续丢包,间歇性丢包,Ping延迟(超100ms)配置在最上面,则对全部监控项生效,如果配置在具体的监控项中,则仅对此监控项生效。

    如果调整了配置文件,一般需要重启docker服务才行

    docker ps //查看docker服务的id
    docker restart 【smokeping的id或者名称】

    钉钉接收到的报警如下:

版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=1623