jackyzm

导航

Centos7部署open-falcon 0.2

参考:

https://www.cnblogs.com/straycats/p/7199209.html

http://book.open-falcon.org/zh_0_2/quick_install/prepare.html

更新说明:

2017/12/06: 由于open-falcon已有0.2.1,增加文字说明,避免命令一路执行下来出现问题(例如“2.2 解压二进制包”)。

===============================================

 

我也是因为工作需要刚刚接触linux,有些内容也是一知半解无法描述清楚,只能日后再进行补充。

官方和github上都有教程,但是对于我来说有的部署内容较为陌生,有点错误官方也未在教程中说明,故在此记录方便以后快速部署,本文部署的时间是2017/7/18。

虽然open-falcon是采用了前后端分离的架构,但是为了方便部署,服务端的后端与前端均部署在同一个虚拟机内,本记录是从centos刚刚装完后的初始环境开始部署,安装全程选择的用户为root。

 


 

一、环境准备

操作系统:centos7(minimal,www.centos.org下载的包是CentOS-7-x86_64-Minimal-1611.iso)

1.1 更换阿里yum(个人习惯)

     步骤:

     1)下载wget                   

yum install -y wget

      2)备份默认的yum

mv /etc/yum.repos.d /etc/yum.repos.d.backup

      3)设置新的yum目录

mkdir /etc/yum.repos.d

      4)下载阿里yum配置到该目录中

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

       5)重建缓存

yum clean all
yum makecache

       6)升级所有包(改变软件设置和系统设置,系统版本内核都升级,故需要几分钟耐心等待)

yum update -y

 

1.2 安装vim(个人习惯)

yum install -y vim

 

1.3 安装git

yum install -y git

 

安装结束后安全起见,确认是否满足官方要求的Git >= 1.7.5

git version

 

1.4 安装go语言环境(因为官方yum和阿里yum都没有go的安装包,故只能通过fedora的epel仓库来安装)

yum install -y epel-release
yum install golang -y

 

安装结束后安全起见,确认是否满足官方要求的Go >= 1.6

go version

 

1.5 安装redis

由于部署go时已经安装了epel,故直接执行下面的安装命令(如果没有装epel,会提示No package redis available,也就是没有安装包可用,因为官方yum和阿里yum都没有redis,故只能通过fedora的epel仓库来安装)

yum install redis -y

启动redis

systemctl start redis

设置redis开机启动 

systemctl enable redis

可以用下面的语句查看redis是否开启

systemctl status redis

 

1.6 安装mysql

      步骤:

      1)下载repo源

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

      2)安装该rpm包(安装这个包后,会获得两个mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo,/etc/yum.repos.d/mysql-community-source.repo)

rpm -ivh mysql-community-release-el7-5.noarch.rpm

      3)安装mysql

yum install mysql-server -y

      4)启动mysql

systemctl start mysql

可以用下面的语句查看mysql是否开启

systemctl status mysql

   

1.7 设置环境变量GOROOT和GOPATH

export GOROOT=/usr/lib/golang
export GOPATH=/home

 

1.8 将open-falcon的源码从github上get下来

      步骤:

      1)创建GOPATH下的一个本地的路径

mkdir -p $GOPATH/src/github.com/open-falcon

      2)进入该路径

cd $GOPATH/src/github.com/open-falcon

      3)将源码get到本地

git clone https://github.com/open-falcon/falcon-plus.git

 

1.9 初始化数据库

复制代码
cd $GOPATH/src/github.com/open-falcon/falcon-plus/scripts/mysql/db_schema/
mysql -h 127.0.0.1 -u root -p < 1_uic-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 2_portal-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 3_dashboard-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 4_graph-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 5_alarms-db-schema.sql
复制代码

 再运行“mysql -h..................”时会提示“Enter password”,如果mysql的root没有设置密码,回车即可。

 

1.10 编译源码并打包

       步骤:

       1)进入本地源码路径下

cd $GOPATH/src/github.com/open-falcon/falcon-plus/

       2)使用go get获取rrdtool工具包(make过程卡壳的一个点) 

go get github.com/open-falcon/rrdlite

这一步是官方教程没有提到的内容,如果不获取该工具包make的时候会报错。

       3)编译所有模块

make all

       4)打包

make pack

 在$GOPATH/src/github.com/open-falcon/falcon-plus/目录下就多了刚才的压缩包“open-falcon-v0.2.0.tar.gz”。

 

1.11 官方提供的安装包

https://book.open-falcon.org/zh_0_2/quick_install/prepare.html中官方有提供编译包,如果编译过程不顺利可以直接下载编译包。


 

二、部署后端

2.1 创建工作目录

export WORKSPACE=/home/work
mkdir -p $WORKSPACE

 

2.2 解压二进制包(包名根据实际进行修改) 

由于我是根据本教程编译源码获得的压缩包,故需要切换到“$GOPATH/src/github.com/open-falcon/falcon-plus/”路径下。

包名由于make pack的时候就是open-falcon-v0.2.0.tar.gz,具体根据实际情况(17/12/6再部署时发现官方已有0.2.1)。

cd $GOPATH/src/github.com/open-falcon/falcon-plus/
tar -xzvf open-falcon-v0.2.0.tar.gz -C $WORKSPACE

 

2.3 修改配置文件cfg.json

猜测部分模块依赖连接数据库,因为如果不修改配置文件,aggregator模块会出现无法启动,graph、hbs、nodata、api、alarm模块会出现开启不报错但是状态为开启失败的情况。(个人认为这块的设计值得作为open-falcon优化的一个点,连接本机mysql如果失败是可以收到错误提示的,第一时间有报错提示总比什么都不显示或显示开启但实际开启失败强,如果别人服务都不知道怎么开起来,系统功能再强大有多少人硬着头皮部署下去而不是选择换个系统试试呢)

 

如果需要每个模块都能正常启动,需要将上面模块的cfg.json的数据库信息进行修改。根据本教程的配置,需要修改配置文件所在的目录: 

模块 配置文件所在路径
aggregator    /home/work/aggregator/config/cfg.json
graph /home/work/graph/config/cfg.json
hbs /home/work/hbs/config/cfg.json
nodata /home/work/nodata/config/cfg.json
api /home/work/api/config/cfg.json
alarm /home/work/alarm/config/cfg.json

1)修改aggregator的配置文件

vim /home/work/aggregator/config/cfg.json

mysql的root密码为空,则去掉“password”,若不为空,则用root密码替换“password”。

 

2)修改graph的配置文件

vim /home/work/graph/config/cfg.json

mysql的root密码为空,则去掉“password”,若不为空,则用root密码替换“password”。

 

3)修改hbs的配置文件

vim /home/work/hbs/config/cfg.json

 

mysql的root密码为空,则去掉“password”,若不为空,则用root密码替换“password”。

 

4)修改nodata的配置文件

vim /home/work/nodata/config/cfg.json

 

mysql的root密码为空,则去掉“password”,若不为空,则用root密码替换“password”。

 

5)修改api的配置文件

vim /home/work/api/config/cfg.json

 

mysql的root密码为空,则去掉“password”,若不为空,则用root密码替换“password”。

 

6)修改alarm的配置文件

vim /home/work/alarm/config/cfg.json

 

mysql的root密码为空,则去掉“password”,若不为空,则用root密码替换“password”。 

 

2.4 启动后端模块

cd $WORKSPACE
./open-falcon start

可以用下面的命令检查各个模块的启动情况

./open-falcon check

更多命令的用法(命令的例子是启动agent模块)

复制代码
# ./open-falcon [start|stop|restart|check|monitor|reload] module
./open-falcon start agent

./open-falcon check

        falcon-graph         UP           53007
falcon-hbs UP 53014 falcon-judge UP 53020 falcon-transfer UP 53026 falcon-nodata UP 53032 falcon-aggregator UP 53038 falcon-agent UP 53044 falcon-gateway UP 53050 falcon-api UP 53056 falcon-alarm UP 53063 For debugging , You can check $WorkDir/$moduleName/log/logs/xxx.log
复制代码

 


 

三、部署前端

3.1 创建工作目录

export FRONTSPACE=/home/front/open-falcon
mkdir -p $FRONTSPACE

 

3.2 获取前端代码

cd $FRONTSPACE
git clone https://github.com/open-falcon/dashboard.git
 

3.3 安装依赖包

yum install -y python-devel
yum install -y openldap-devel
yum install -y mysql-devel
yum groupinstall "Development tools" -y

cd $FRONTSPACE/dashboard/
virtualenv ./env

安装并升级pip:
方法一:
yum -y install epel-release

yum install python-pip
pip install --upgrade pip

pip install -r pip_requirements.txt -i https://pypi.douban.com/simple

方法二:

yum -y install epel-release

yum install python-pip
./env/bin/pip install --upgrade pip
./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple

复制代码

 方法三:

wget https://files.pythonhosted.org/packages/69/81/52b68d0a4de760a2f1979b0931ba7889202f302072cc7a0d614211bc7579/pip-18.0.tar.gz

tar zxvf pip-18.0.tar.gz

cd 

pip-18.0.tar.gz

 

python setup.py install

 

3.4 修改配置

根据本次记录的配置,dashboard的配置文件在/home/front/open-falcon/dashboard/rrd/config.py,需要根据实际情况对内部配置进行修改。

由于前端后台搭在一台虚拟机里,且暂时不接入LDAP,且数据库root的密码为空,故先不修改配置文件。

  

3.5 开启8081端口

1)防火墙添加8081端口永久开放

firewall-cmd --add-port=8081/tcp --permanent

2)重新载入防火墙配置

firewall-cmd --reload

 

3.6 在生产环境启动

bash control start

由于虚拟机ip配置为192.168.3.1,故在浏览器中输入192.168.3.1:8081后跳转。

 

3.7 以开发者模式启动 

./env/bin/python wsgi.py

 

 四:open-falcon 部署 agent(远程被监控端为Centos7)

4.1参照第三步配置前端项目:

 

4.1.1 创建工作目录

export FRONTSPACE=/home/front/open-falcon
mkdir -p $FRONTSPACE
 

4.1.2 获取前端代码

cd $FRONTSPACE
git clone https://github.com/open-falcon/dashboard.git
 
4.1.3 安装依赖包

复制代码yum install -y python-virtualenv
yum install -y python-devel
yum install -y openldap-devel
yum install -y mysql-devel
yum groupinstall "Development tools" -y

cd $FRONTSPACE/dashboard/
virtualenv ./env

安装并升级pip:
方法一:
yum -y install epel-release
yum install python-pip
pip install --upgrade pip
pip install -r pip_requirements.txt -i https://pypi.douban.com/simple
yum clean all
方法二: yum -y install epel-release yum install python-pip ./env/bin/pip install --upgrade pip ./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simpl
yum clean all

方法三:
wget
https://files.pythonhosted.org/packages/69/81/52b68d0a4de760a2f1979b0931ba7889202f302072cc7a0d614211bc7579/pip-18.0.tar.gz
tar -zxvfpip-18.0.tar.gz
cd pip-18.0.tar.gz
python setup.py install
4.1.4 修改配置

根据本次记录的配置,dashboard的配置文件在/home/front/open-falcon/dashboard/rrd/config.py,需要根据实际情况对内部配置进行修改。

由于前端后台搭在一台虚拟机里,且暂时不接入LDAP,且数据库root的密码为空,故先不修改配置文件。

# Falcon+ API    172.16.8.63 为监控服务器IP
API_ADDR = os.environ.get("API_ADDR","http://172.16.8.63:8080/api/v1")

# portal database
# TODO: read from api instead of db
PORTAL_DB_HOST = os.environ.get("PORTAL_DB_HOST","172.16.8.63")
PORTAL_DB_PORT = int(os.environ.get("PORTAL_DB_PORT",3306))
PORTAL_DB_USER = os.environ.get("PORTAL_DB_USER","root")
PORTAL_DB_PASS = os.environ.get("PORTAL_DB_PASS","密码")
PORTAL_DB_NAME = os.environ.get("PORTAL_DB_NAME","falcon_portal")

# alarm database
# TODO: read from api instead of db
ALARM_DB_HOST = os.environ.get("ALARM_DB_HOST","172.16.8.63")
ALARM_DB_PORT = int(os.environ.get("ALARM_DB_PORT",3306))
ALARM_DB_USER = os.environ.get("ALARM_DB_USER","root")
ALARM_DB_PASS = os.environ.get("ALARM_DB_PASS","密码")
ALARM_DB_NAME = os.environ.get("ALARM_DB_NAME","alarms")

 

4.1.5 开启端口


1)防火墙添加8081端口永久开放
firewall-cmd --add-port=8081/tcp --permanent


4.1.6 在生产环境启动 bash control start 由于虚拟机ip配置为192.168.3.1,故在浏览器中输入192.168.3.1:8081后跳转。 4.1.7 以开发者模式启动 ./env/bin/python wsgi.py

 

方法三:
wget https://files.pythonhosted.org/packages/69/81/52b68d0a4de760a2f1979b0931ba7889202f302072cc7a0d614211bc7579/pip-18.0.tar.gz
tar -zxvfpip-18.0.tar.gz
cd pip-18.0.tar.gz
python setup.py install

 

开放其他端口:

 

heartbeat:

 

firewall-cmd --zone=public --add-port=6030/tcp --permanent

 

transfer:

 

firewall-cmd --zone=public --add-port=8433/tcp --permanent

 


firewall-cmd --reload

 

firewall-cmd --zone=public --list-ports

 

4.2、 介绍agent

agent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。

4.3、 部署agent

  • agent需要部署到所有要被监控的机器上,比如公司有10万台机器,那就要部署10万个agent。agent本身资源消耗很少,不用担心。
  • 首先找到之前后端服务的解压目录:
/home/work/open-falcon/
  • 拷贝agent到需要监控的服务器上面

 scp -r open-falcon root@172.16.8.64:/usr/local/work

拷贝open-falcon到需要监控的服务器上面

scp -r open-falcon root@dst1:/home/work/open-falcon

 修改配置文件:

  • 配置文件必须叫cfg.json,如下参照修改:

 

{
    "debug": true,        # 控制一些debug信息的输出,生产环境通常设置为false
    "hostname": "",       # agent采集了数据发给transfer,endpoint就设置为了hostname,默认通过`hostname`获取,如果配置中配置了hostname,就用配置中的
    "ip": "", # agent与hbs心跳的时候会把自己的ip地址发给hbs,agent会自动探测本机ip,如果不想让agent自动探测,可以手工修改该配置
    "plugin": {
        "enabled": false,   # 默认不开启插件机制
        "dir": "./plugin",   # 把放置插件脚本的git repo clone到这个目录
        "git": "https://github.com/open-falcon/plugin.git", # 放置插件脚本的git repo地址
        "logs": "./logs"   # 插件执行的log,如果插件执行有问题,可以去这个目录看log
    },
    "heartbeat": {
        "enabled": true,    # 此处enabled要设置为true
        "addr": "127.0.0.1:6030", # hbs的地址,端口是hbs的rpc端口
        "interval": 60,   # 心跳周期,单位是秒
        "timeout": 1000   # 连接hbs的超时时间,单位是毫秒
    },
    "transfer": {
        "enabled": true, 
        "addrs": [
            "127.0.0.1:18433"
        ],            # transfer的地址,端口是transfer的rpc端口, 可以支持写多个transfer的地址,agent会保证HA
        "interval": 60,   # 采集周期,单位是秒,即agent一分钟采集一次数据发给transfer
        "timeout": 1000   # 连接transfer的超时时间,单位是毫秒
    },
    "http": {
        "enabled": true,   # 是否要监听http端口
        "listen": ":1988",
        "backdoor": false
    },
    "collector": {
        "ifacePrefix": ["eth", "em"], # 默认配置只会采集网卡名称前缀是eth、em的网卡流量,配置为空就会采集所有的,lo的也会采集。可以从/proc/net/dev看到各个网卡的流量信息
        "mountPoint": []
    },
    "default_tags": {
    },
    "ignore": {  # 默认采集了200多个metric,可以通过ignore设置为不采集
        "cpu.busy": true,
        "df.bytes.free": true,
        "df.bytes.total": true,
        "df.bytes.used": true,
        "df.bytes.used.percent": true,
        "df.inodes.total": true,
        "df.inodes.free": true,
        "df.inodes.used": true,
        "df.inodes.used.percent": true,
        "mem.memtotal": true,
        "mem.memused": true,
        "mem.memused.percent": true,
        "mem.memfree": true,
        "mem.swaptotal": true,
        "mem.swapused": true,
        "mem.swapfree": true
    }
}

4.4、 启动agent

./open-falcon start agent  启动进程
./open-falcon stop agent  停止进程
./open-falcon monitor agent  查看日志

看var目录下的log是否正常,或者浏览器访问其1988端口。另外agent提供了一个--check参数,可以检查agent是否可以正常跑在当前机器上./falcon-agent --check

五:open-falcon 部署 agent(远程被监控端为windows10)

http://book.open-falcon.org/zh_0_2/usage/win.html
  • windows_collect:python脚本
  • windows-agent: go 语言实现的 agent
  • Windows-Agent:汽车之家开源的作为Windows Service运行的Agent,python实现。
  • windows-agent:另一个 go 语言实现的 windows-agent。支持端口,进程监控,支持后台服务运行。

5.1windows_collect方法:

5.2环境准备:

5.2.1、安装python

    版本:2.7.11

    直接网上下载,然后点击安装就行了,非常简单

    然后设置环境变量,自行百度即可。

 Python2.7.11: https://www.python.org/ftp/python/2.7.11/python-2.7.11.amd64.msi

    安装路径”C:\Python27\”

 在环境变量path中加入python路径:

 我的电脑-右键-属性-高级系统设置-环境变量-Path-新建-C:\Python27

   以管理员身份运行cmd

 更新pip

 python -m pip install -U pip //此命令在cmd下执行,无路径要求 

   我的电脑-右键-属性-高级系统设置-环境变量-Path-新建-C:\Python27\Scripts

   安装依赖库

   pip install psutil   //此命令在cmd下执行,无路径要求

   pip install requests  //此命令在cmd下执行,无路径要求

  开启逻辑和物理磁盘计数器功能

  在cmd中手动运行 ‘diskperf -y’  //此命令在cmd下执行,无路径要求

  部署脚本windows_collect.py 拷贝以下代码到C:\open-falcon\work\agent目录并建立.py文件

#coding=utf8
import psutil
import time
import json
import requests
import copy


cpu_interval = 60
push_interval = 300
zh_decode = "gbk"
endpoint = "YOUR_HOSTNAME"
ignore_interface = ["Loopback","Teredo Tunneling","isatap","6TO4 Adapter"]
push_url = "http://agent_host:1988/v1/push"

#######################################################

def main():

    ts = int(time.time())
    payload = []
    data = {"endpoint":endpoint,"metric":"","timestamp":ts,"step":push_interval,"value":"","counterType":"","tags":""}


    cpu_status = psutil.cpu_times_percent(interval=cpu_interval)
    mem_status = psutil.virtual_memory()
    swap_status = psutil.swap_memory()
    disk_io_status = psutil.disk_io_counters(perdisk=True)
    net_io_status = psutil.net_io_counters(pernic=True)

    data["metric"] = "cpu.user"
    data["value"] = cpu_status.user
    data["counterType"] = "GAUGE"
    payload.append(copy.copy(data))

    data["metric"] = "cpu.system"
    data["value"] = cpu_status.system
    payload.append(copy.copy(data))

    data["metric"] = "cpu.idle"
    data["value"] = cpu_status.idle
    payload.append(copy.copy(data))

    data["metric"] = "mem.memused.percent"
    data["value"] = mem_status.percent
    payload.append(copy.copy(data))

    data["metric"] = "mem.swapused.percent"
    data["value"] = swap_status.percent
    payload.append(copy.copy(data))

    disk_status = psutil.disk_partitions()
    for disk in disk_status:
        if 'cdrom' in disk.opts or disk.fstype == '':
            continue
        disk_info = psutil.disk_usage(disk.mountpoint)

        data["metric"] = "df.used.percent"
        data["value"] = disk_info.percent
        data["tags"] = "disk=" + disk.device.split(":")[0]
        payload.append(copy.copy(data))
        
        data["metric"] = "df.byte.total"
        data["value"] = disk_info.total
        payload.append(copy.copy(data))
        
        data["metric"] = "df.byte.used"
        data["value"] = disk_info.used
        payload.append(copy.copy(data))
        
        data["metric"] = "df.byte.free"
        data["value"] = disk_info.free
        payload.append(copy.copy(data))


    for key in disk_io_status:
        #print "device_name = %s" % key
        data["metric"] = "disk.io.read_count"
        data["value"] = disk_io_status[key].read_count
        data["tags"] = "device=" + key
        data["counterType"] = "COUNTER"
        payload.append(copy.copy(data))
        
        data["metric"] = "disk.io.write_count"
        data["value"] = disk_io_status[key].write_count
        payload.append(copy.copy(data))
        
        data["metric"] = "disk.io.read_bytes"
        data["value"] = disk_io_status[key].read_bytes
        payload.append(copy.copy(data))
        
        data["metric"] = "disk.io.write_bytes"
        data["value"] = disk_io_status[key].write_bytes
        payload.append(copy.copy(data))
        
        data["metric"] = "disk.io.read_time"
        data["value"] = disk_io_status[key].read_time
        payload.append(copy.copy(data))
        
        data["metric"] = "disk.io.write_time"
        data["value"] = disk_io_status[key].write_time
        payload.append(copy.copy(data))

    for key in net_io_status:
        if is_interface_ignore(key) == True:
            continue

        data["metric"] = "net.if.in.bytes"
        data["value"] = net_io_status[key].bytes_recv
        data["tags"] = "interface=" + key.decode(zh_decode)
        payload.append(copy.copy(data))
        
        data["metric"] = "net.if.out.bytes"
        data["value"] = net_io_status[key].bytes_sent
        payload.append(copy.copy(data))
        
        data["metric"] = "net.if.in.packets"
        data["value"] = net_io_status[key].packets_recv
        payload.append(copy.copy(data))
        
        data["metric"] = "net.if.out.packets"
        data["value"] = net_io_status[key].packets_sent
        payload.append(copy.copy(data))
        
        data["metric"] = "net.if.in.error"
        data["value"] = net_io_status[key].errin
        payload.append(copy.copy(data))
        
        data["metric"] = "net.if.out.error"
        data["value"] = net_io_status[key].errout
        payload.append(copy.copy(data))
        
        data["metric"] = "net.if.in.drop"
        data["value"] = net_io_status[key].dropin
        payload.append(copy.copy(data))
        
        data["metric"] = "net.if.out.drop"
        data["value"] = net_io_status[key].dropout
        payload.append(copy.copy(data))
    #print json.dumps(payload,indent=4)
    r = requests.post(push_url, data=json.dumps(payload))
    #print r.text

def is_interface_ignore(key):
    for ignore_key in ignore_interface:
        if ignore_key in key:
            return True

if __name__ == "__main__":
    main()

 

5.2.2:脚本部署及修改

    

脚本名称:windows_collect.py

脚本位置:C:\open-falcon\work\agent  (此目录自己指定)

此脚本的主要监控项在github里面都有说明,这里就说一下需要修改的地方。

cpu_interval = 60 
push_interval = 300  
push_interval_agent = 60   
zh_decode = "gbk"
endpoint = "******"   
ignore_interface = ["Loopback","Teredo Tunneling","isatap","6TO4 Adapter"]
push_url = "

push_interval = 300 

这是推送间隔,默认的是300秒

push_interval_agent = 60 

这个是我自己设置的推送agent.alive的间隔,用于主机存活监测,会推送一个值为1,不需要可忽略。

endpoint = “***”

这是给该机器的配的名称,自己指定

push_url = "http://172.16.8.63:1988/v1/push"

这是推送接口,因为本身是脚本获取系统信息,需要借用其他的agent的接口来将信息推送到服务器端,这个第一次很难理解,我也是想了好久。

cpu_interval = 60
push_interval = 300
zh_decode = "gbk"
#endpoint = "YOUR_HOSTNAME"
endpoint = "logistics-01"                           显示名称
ignore_interface = ["Loopback","Teredo Tunneling","isatap","6TO4 Adapter"]
#push_url = "http://agent_host:1988/v1/push"        内网
push_url = "http://110.80.23.186:1988/v1/push"      外网    

  

 

增加agent.alive 主机存活的监控:

windows_collect.py脚本里并无agent.alive的监控项,但是我们如果需要监控机器的存活的话,

那么可以用一下的方法:

1、定时推送agent.alive的值到ope-falcon的服务器端

2、如果没有数据推送,在Nodata里面将agent.alive的数据设置为-1

3、配置报警规则,如果agent.alive 的值小于0,那么发送报警。

 

需要在脚本里增加一个推送agent.alive的函数,单独来推送

def agent_alive():
    ts = int(time.time())
    payload = []
    data = {"endpoint":endpoint,"metric":"","timestamp":ts,"step":push_interval_agent,"value":"","counterType":"","tags":""}
    data["metric"] = "agent.alive"
    data["value"] = "1"  推送一个值为1
    data["counterType"] = "GAUGE"
    payload.append(copy.copy(data))

为什么要单独来推送呢?

因为在测试中发现,如果将agent.alive和其他的系统数据一起推送的话,推送间隔很难协调。如果设置为300秒,那么间隔太长,会触发主机存活报警,如果将设置调小的话,那么获取的其他系统数据都不完整了,所以将他们都分开来推送,agent_alive 单独设置为60秒,其他数据保持300秒。也就是最上面配置的那个

push_interval = 300  
push_interval_agent = 60

最后,在main()函数执行之后,再执行agent_alive函数。

if __name__ == "__main__":
    main()
    agent_alive()

修改完成之后,在windows终端里面执行以下,如果没有报错,那么就没有问题,可以配置计划任务了。

 

第三步:配置计划任务

将脚本修改完毕之后,需要放到计划任务中执行,设置为1分钟执行一次,

1、首先建立一个批处理文件,里面就一句话

  C:\Python27\python.exe  C:\open-falcon\workspace\agent\windows_collect.py

2、新建计划任务

  控制面板--管理工具--任务计划程序

  点击创建基本任务:

  填上名称 

  wKioL1c9fwqyiIFBAAB4a463W_U510.png

  wKioL1c9fwrA-Dp4AAB8wqg9AjY273.png

  wKioL1c9fwrB6RAeAACUuy7Hf1c857.png

  wKioL1c9fwuhu-0MAAB0nzR86HU191.png

  指定程序位置,也就是我们刚建立的bat文件,还要把起始于也填上,也就是bat的路径

  wKiom1c9fiDw3vXQAAD7AEvp2v8382.png

3、修改计划任务属性
  

  wKiom1c9gE7BXtKvAABRkgA68NA932.png

  wKiom1c9gE7DK-UUAAFQxcJtNZQ798.png

  修改完毕之后,将计划任务打开就行了。

 

以上,windows机器的open-falcon监控就完成了,可以去web端配置报警规则以及screen了。

 

六:短信报警配置(使用灵犀报警平台,感谢灵犀团队!

   6.1:配置open-falcon alarm 报警模块

  6.1.1:使用灵犀云通道需要配置alarm模块

  vim /usr/local/work/open-falcon/alarm/config/cfg.json

  灵犀token获取方法:

  进入灵犀首页

  https://www.linkedsee.com/

  控制台-云通道-我的应用-新建应用-新建后页面上有token(注意云通道和云告警token不一样)

    "api": {
        "im": "http://127.0.0.1:10086/wechat",
        "sms": "https://www.linkedsee.com/alarm/falcon_sms/灵犀token/alarm_sms",
        "mail": "http://127.0.0.1:10086/mail",
        "dashboard": "http://127.0.0.1:8081",
        "plus_api":"http://127.0.0.1:8080",
        "plus_api_token": "default-token-used-in-server-side"

 

  6.1.2:使用灵犀云告警请配置open-falcon的web界面中callback地址,两个方法token不一样,请再次注意,此方法暂未测试

 

Open-Falcon微信告警组件

在此

感谢 @laiwei 的https://github.com/open-falcon/mail-provider 项目代码支持

感谢 @chanxuehong 老司机的微信SDK支持

申请微信企业号

https://work.weixin.qq.com/ 注册微信企业号,不需要认证即可

配置企业号

在企业号里建立应用,依此点击:企业应用-创建应用。可见范围里添加成员 获取企业ID:点击我的企业--获取企业ID 1获取应用AgentId及应用Secret 2

部署Falcon-wechat

Falcon-wechat可部署在Falcon-Alarm机器,也可部署在独立机器,使用以下命令部署

 mkdir -p /usr/local/falcon-wechat
 cd /usr/local/falcon-wechat
 wget https://dl.cactifans.com/open-falcon/falcon-wechat-0.0.1.tar.gz
 tar zxvf falcon-wechat-0.0.1.tar.gz

修改配置文件cfg.json配置文件,将corpid修改为你的企业ID,secret修改为你应用的secret,agentid修改为你的AgentId,并保存

{
        "debug": true,
        "http": {
                "listen": "0.0.0.0:9527",
                "token": ""
        },
        "wechat": {
	        "corpid": "wxa7c63522727b6bf0",
	        "secret": "d5S-_XGVd-5HA0o9bkvMMK5Wh1qwCC-YQei4WcL9hSM",
	        "agentid": 1
    }
}

启动falcon-wechat

./control start

启动信息

falcon-wechat started..., pid=13875

启动之后可使用以下命令测试是否成功

curl -d "tos=zhanghao&content=内容" "http://127.0.0.1:9527/wechat"

tos 后面为用户账号

content 后面为内容

如看到success表示发送成功,如遇到错误可使用以下命令查看日志

./control tail

如看到以下信息表示成功

2018/07/19 14:44:28 config.go:64: load configuration file cfg.json successfully 2018/07/19 14:44:28 http.go:25: http listening 0.0.0.0:9527

常用命令

./control start 启动程序

./control stop 停止程序

./control build 从源码编译程序

./control pack 打包程序

配置Open-Falcon

配置Alarm组件

修改Open-Falcon的Alarm组件config目录下的配置文件cfg.json,将IM段修改为以下内容

	"im": "http://127.0.0.1:9527/wechat",

如果你修改了falcon-wechat的默认端口,请注意修改。如falcon-wechat和Alarm组件为不同机器,注意修改IP地址。 修改之后重启Alarm服务,使其生效

配置IM信息

在Dashboard里,为用户配置IM账号为户用户账号!用户账号! 用户账号 不是微信号,重要事情说三遍!

3用户账号

4

效果

告警

5微信

6

注意事项

1.由于使用企业微信发送消息接口实现,接口调用速率有限制。注意控制消息发送频率,目前每次发消息都会请求一次Access_token,后续优化。

2.由于未认证企业发送消息数量与人员有关,建议控制频率。具体查看官网API文档https://work.weixin.qq.com/api/doc#10785

 

 

 

参考资料:

1.https://book.open-falcon.org/zh_0_2/quick_install/index.html

2.http://www.cnblogs.com/comexchan/p/5815869.html

3.http://www.jiloc.com/42528.html

4.http://www.cnblogs.com/lanblogs/p/6104834.html

5:微信配置 https://github.com/canghai908/falcon-wechat

 

posted on 2018-08-28 08:19  jackyzm  阅读(369)  评论(0编辑  收藏  举报