zoukankan      html  css  js  c++  java
  • [Linux实用工具]munin-node插件配置和插件编写

    前面介绍了2篇munin使用的相关文章:

     
    这次介绍一下munin-node的插件的安装配置和插件的编写。
     

    插件配置

    munin-node本身就集成了很多的插件,只需要直接建个软链就可以了。像Nginx、Apach、mysql都是有现成的插件可以使用的。
    munin的插件默认保存在/etc/munin/plugins里面。进去查看会发现很多软链,软链到/usr/share/munin/plugins 这个目录下的文件。没错,munin的插件都是放置在/usr/share/munin/plugins 下的。使用相当简单,只需要参考原有的例子,直接建软链过去就可以了。
     
    下面以mysql的插件为例:
    ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads
    ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
    ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes
    ln -s /usr/share/munin/plugins/mysql_innodb /etc/munin/plugins/mysql_innodb
     
    然后重启一下munin-node 就可以生效了。
    service munin-node restart
     
     

    插件编写

    如果需要监控的应用没有相关的插件支持怎办?也很简单。随意打开一个现有的插件,会发现具体的代码内容,观察发现编写一个插件也不是很难。而且munin-node的插件支持shell、python、perl。也可以根据自己熟悉的语言来编写插件。
     

    munin-node 提供的插件实例

    以threads (/usr/share/munin/plugins/threads)插件为例,我们可以查看内部代码:
    #!/bin/sh
    # -*- sh -*-
    # vim: ft=sh
     
    if [ "$1" = "autoconf" ]; then
        grep -q '^Threads' /proc/$$/status && echo "yes" || echo "no"
        exit 0
    fi
     
    if [ "$1" = "config" ]; then
        echo 'graph_title Number of threads'
        #echo 'graph_args --base 1000 -l 0 '
        echo 'graph_vlabel number of threads'
        echo 'graph_category processes'
        echo 'graph_info This graph shows the number of threads.'
        echo 'threads.label threads'
        echo 'threads.info The current number of threads.'
        exit 0
    fi
     
    grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print "threads.value", sum; }'
     
    可以直接执行插件的文件查看输出数据的结构。可以发现所有的输出的格式都是一样的,而且都有1个参数。
    分别使用参数autoconf、config和不使用参数,查看输出内容:
    sh threads autoconf
    yes
     
    sh threads config
    graph_title Number of threads
    graph_vlabel number of threads
    graph_category processes
    graph_info This graph shows the number of threads.
    threads.label threads
    threads.info The current number of threads.
     
    sh threads
    threads.value 174
     

    参数说明

    autoconf
    用于检测是否有进程的存在。非必要。
     
    config
    使用config参数的时候,输出的内容是绘图的配置信息,查看字段意思也可以知道字段的意思。
     
    不使用参数
    不使用参数的时候,输出的是具体的进程数量。这个跟具体的命令输出有关系。
    grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print "threads.value", sum; }'
     

    自定义插件

    既然知道每个参数需要输出的具体内容,那么我们就可以依葫芦画瓢,我们就可以写出我们自己的插件。下面给出一个具体的例子,该例子用于监控一个游戏服务器的内存和CPU。
    #!/bin/sh
     
    keyword=munin-node
     
    case $1 in
       (config)
          cat <<'EOM'
    graph_title MY_TITLE
    graph_vlabel (%)
    graph_args --base 1000 -l 0
    graph_scale no
    graph_category MY_CATEGORY
    EOM
    ps aux | grep $keyword | grep -v grep | awk '{print $3,$4}' | while read cpu mem
    do
       echo "CPU.label %CPU"
       echo "CPU.warning 200"
       echo "CPU.critical 400"
       echo "CPU.value $cpu"
     
       echo "MEM.label %MEM"
       echo "MEM.warning 20"
       echo "MEM.critical 50"
       echo "MEM.value $mem"
     
    done
     exit 0;;
    esac
    ps aux | grep $keyword | grep -v grep | awk '{print $3,$4}' | while read cpu mem
    do
       echo "CPU.value $cpu"
       echo "MEM.value $mem"
    done
     
    这里没有使用autoconf参数,其实应该使用的,万一该进程不存在怎么办,是吧。其实没有统计到数值的时候,图表是空的,所有才说autoconf参数不是必须的。
    这个例子与threads不一样的是,这里收集到的是多条数据。
    插件写好了之后,需要在/etc/munin/plugin-conf 配置一下。加入上面例子以munin-node_cpu 文件名保存。
    在/etc/munin/plugin-conf 下新增一个文件,名字可以任意,如munin_info:
    # cat munin_info
    [munin-node_cpu]
    user root
     
    然后重启munin-node就可以了。
     
    是吧,插件编写其实很简单吧。只要输出的格式符合要求,随便你使用perl、python还是shell。具体的监控完全可以自定义。譬如我假设有访问游戏服在线人数的接口,我也可以拿出来监控,当在线人数超过多少的时候给予相关提示。

    开始使用独立博客了,原文地址在这里:

  • 相关阅读:
    c++11-17 模板核心知识(七)—— 模板参数 按值传递 vs 按引用传递
    c++11-17 模板核心知识(六)—— 理解auto推导规则
    c++11-17 模板核心知识(五)—— 理解模板参数推导规则
    c++11-17 模板核心知识(四)—— 可变参数模板 Variadic Template
    c++11-17 模板核心知识(三)—— 非类型模板参数 Nontype Template Parameters
    c++11-17 模板核心知识(二)—— 类模板
    c++11-17 模板核心知识(一)—— 函数模板
    Docker修改Devicemapper存储驱动为Direct-lvm模式
    Linux配置/etc/resolv.conf详解
    深入浅出容器学习--Docker网络
  • 原文地址:https://www.cnblogs.com/rond/p/3804345.html
Copyright © 2011-2022 走看看