zoukankan      html  css  js  c++  java
  • (原)ubuntu下cadvisor+influxdb+grafana+supervisord监控主机和docker的containers

    ubuntu下cadvisor+influxdb+grafana+supervisord监控主机和docker的containers(运行在主机上)

    适用于类ubuntu系统.amd64.

    1. influxdb: (以后考虑把influxdb换成prometheus)

    https://influxdb.com/docs/v0.8/introduction/installation.html#ubuntu-debian
    (只能先选择deb安装的方式了。。没办法 代码编译方式是不行了 go发展尚未成熟稳定很多库变动太快太大导致很多包路径已经改了0.88版本down下来已经编译不过了 所以我先安装deb-然后拷出influxdb二进制文件-最后再清理卸载系统里的influxdb)
    $ wget http://get.influxdb.org.s3.amazonaws.com/influxdb_0.8.9_amd64.deb
    $ sudo dpkg -i influxdb_0.8.9_amd64.deb
    把两个文件拷出来,其他的都删掉.两个文件是:
    /usr/bin/influxdb
    /opt/influxdb/shared/config.toml
    $ cd ...where/CIGS
    $ chown ${USER}:${USER} influxdb
    $ chown ${USER}:${USER} config.toml
    $ vi config.toml
    几个路径改一下就可以了。

    另外,一个不是很必要的操作——提高打开文件数的限制:
    (之所以不是和必要,是因为官方说“Pretend like we made it past 1999 and computers can actually handle more than 256 open files”..才256个...)
    https://influxdb.com/docs/v0.8/introduction/installation.html#file-limits

    如果提升了打开文件数,修改好了config.toml,这样就可以执行了(注意配置文件里的路径必须存在且权限合适):
    $ ulimit -n 40960 ## 仅对当前终端有效
    $ ./influxdb -config=config.toml

    我是写了个脚本用sudo运行:
    #!/bin/bash
    mkdir -p /data/influxdb/shared/data/raft
    mkdir -p /data/influxdb/shared/data/db
    mkdir -p /data/influxdb/shared/data/wal
    ulimit -n 40960
    ./influxdb -config=config.toml

    接下来清理卸载系统里的influxdb:
    停掉所有influxdb进程,然后su里find / -name "*influx*"然后手动清删influxdb.

    清理完文件,再清理influx的用户权限:
    $ sudo userdel influxdb
    $ sudo groupdel influxdb
    检验:sudo cat /etc/group | grep influx发现已经没有influx了.
    如果还有且在docker那行(这是一个坑):
    (注:如果没有了就不要搞下面的命令了.)
    $ sudo groupdel docker
    $ sudo groupadd docker
    $ sudo gpasswd -a ${USER} docker && sudo service docker restart
    如果还有那就sudo vi /etc/group, 对于docker1.9.1,docker那一行是:docker:x:999:yourName
    注:
    检验彻底清理了influx和docker权限是否还混一块:
    $ docker run --rm -it redis
    $ ps aux | grep redis看看是否还有influxdb这个用户.

    另:
    据说influxdb依赖这些库,不过我并不需要,可能系统已经有了:
    $ sudo apt-get install mercurial bzr protobuf-compiler flex bison valgrind g++ make autoconf libtool libz-dev libbz2-dev curl build-essential git wget

    最后,关于influxdb,过程中看了一下查询语句,记录如下:
    list series //列出当前db下全部的表
    select * from /.*/ limit 10 //列出当前db的所有的表的前10条数据
    select * from stats where container_name='redis' limit 10
    select * from stats where container_name =~ /^[^/]/ limit 10 // 不以/开头的(所有docker的container)

    2. cadvisor:

    https://github.com/google/cadvisor/releases/latest 直接下载二进制文件.
    $ chmod +x cadvisor
    $ mv cadvisor ...where/CIGS/
    注:此时的cadvisor只能支持influxdbv0.8.

    运行(必须sudo)并使之对接influxDB:
    $ sudo ./cadvisor -storage_driver=influxdb -storage_driver_host=localhost:8086 -storage_driver_db='cadvisor'
    (各参数意义见:https://github.com/google/cadvisor/blob/master/docs/influxdb.md )

    注:influxdb跑起来后,首次运行要创建一个db进去(cadvisor配置成往这个db里写数据):
    $ curl "http://localhost:8086/db?u=root&p=root" -d "{"name": "cadvisor"}"

    注(一个坑):不知道为啥,cadvisor自带的前端一开始很流畅,用了两天后在chrome打开会非常的卡,firefox却不卡。
    不知道为啥,清理了chrome的所有浏览数据后还是卡,然而不了了之。反正最终三合一方案并不需要这个前端.

    3. grafana:

    http://grafana.org/download/ 下载tar包.
    $ tar zxvf grafana-2.5.0.linux-x64.tar.gz
    $ mv grafana-2.5.0 ...where/CIGS/
    写个脚本放到CIGS目录里:
    #!/bin/bash
    HOMEPATH=grafana-2.5.0
    mkdir -p /data/grafana/log
    mkdir -p /data/grafana/dashboards
    $HOMEPATH/bin/grafana-server -homepath=$HOMEPATH -config=grafana.ini

    sudo执行即可. 然后打开前段进行配置:
    http://localhost:3000
    登陆进去(账户见配置文件): Data Sources/Add new:
    Name:cadvisor Default:√
    Type:influxDB 0.8.x
    Url:http://localhost:8086 Access:proxy
    Basic Auth: Enable (不勾选,貌似没用)
    Database:cadvisor
    User:root Password:root
    然后配个Dashboards:
    Dashboards/Home↓/+New
    。。。。

    住:配置文件grafana.ini如果修改了,可能不会被应用。这时需要sudo rm -rf /data/grafana/grafana.db

    另,据说grafana依赖这些库,不过我并不需要,可能系统已经有了:
    $ sudo apt-get install -y adduser libfontconfig

    4. supervisord使三合一

    4.1 安装supervisor
    $ apt-cache show supervisor
    看看是不是3.0版本的.
    安装:
    $ sudo apt-get install supervisor
    看是否安装成功:
    $ echo_supervisord_conf
    $ ps aux | grep supervisor
    $ vi /etc/supervisor/supervisord.conf
    最后一行..

    4.2 三合一:
    $ vi cigs-supervisor.conf
    (仅摘录部分)
    [unix_http_server]
    file=/tmp/vmd_supervisord.sock

    [supervisord]
    pidfile=/tmp/vmd_supervisord.pid
    nodaemon=true

    [supervisorctl]
    serverurl=unix:///tmp/vmd_supervisord.sock
    prompt=cigs

    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

    [program:cadvisor]
    command=%(here)s/runCAdvisor
    directory=%(here)s
    autorestart=true
    startsecs=4
    startretries=99
    stopasgroup=true
    killasgroup=true
    redirect_stderr=true
    stdout_logfile=%(here)s/log/%(program_name)s_supervisor.log
    stdout_logfile_maxbytes=500MB
    stdout_logfile_backups=50
    stdout_capture_maxbytes=1MB
    stdout_events_enabled=false
    environment = PYPY_GC_MAX="250MB", PYPY_GC_GROWTH=1.2, PYPY_GC_MAX_DELTA="192MB"
    ...
    以上,cigs-supervisor.conf是启动cadvisor,influxdb和grafana的完整的suerpvisor配置文件.
    这样:通过系统的supervisord来启动这样一个任务,任务的命令是这样的:supervisord -c cigs-supervisor.conf
    所以,往/etc/supervisor/conf.d/xx.conf里写配置文件:
    CIGS_SUPERVISOR_CONF=$(pwd)/cigs-supervisor.conf
    FILE_WRITE=/etc/supervisor/conf.d/cigs.conf
    echo "[program:cigs]" > $FILE_WRITE
    echo "command = supervisord -c $CIGS_SUPERVISOR_CONF" >> $FILE_WRITE
    echo "autostart=true" >> $FILE_WRITE
    echo "autorestart=true" >> $FILE_WRITE
    echo "startsecs=5" >> $FILE_WRITE

    重启supervisord即可:
    (本机发现sudo service supervisor stop等没作用.所以重启方法如下)
    $ sudo supervisorctl
    $ shutdown
    $ sudo service supervisor start

    5. 最后,扔个python程序到服务器,定时检测内存超过90%则报警.
    我采用slack报警,用到的py库:
    https://pypi.python.org/pypi/psutil
    https://pypi.python.org/pypi/pyslack-real
    同样的,这个py程序,也放到supervisord里.
    (这个报警程序,直接改cadvisor的代码用go实现也是一个很不错的选择.)

  • 相关阅读:
    Codeforces 611C. New Year and Domino 动态规划
    POJ2585 Window Pains 拓扑排序
    HDOJ1242 Rescue(营救) 搜索
    codeforces 数字区分 搜索
    ZOJ2412 Farm Irrigation(农田灌溉) 搜索
    hdu 4389 X mod f(x) 数位dp
    hdu 4734 F(x) 数位dp
    Codeforces Beta Round #51 D. Beautiful numbers 数位dp
    hdu 3652 B-number 数位dp
    bzoj 1026: [SCOI2009]windy数 数位dp
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/5008964.html
Copyright © 2011-2022 走看看