开源运维监控open-falcon的快速部署

在目前流行的三大开源运维监控工具Zabbix、Nagios、Open-Falcon当中,Open-Falcon属于后起之秀,由小米团队提供,可以从运营级别(基本配置即可),以及应用级别(二次开发,通过端口进行日志上报),对服务器、操作系统、中间件、应用进行全面的监控,及报警,对我们的系统正常运行的作用非常重要。由于公司有意采用这款监控,我也专门花时间简单研究了一下,在这就提供一下如何进行快速部署(分为Docker部署和Linux普通部署):
falcon-plus:https://github.com/open-falcon/falcon-plus
中文社区:http://book.open-falcon.org/zh_0_2/

事先放一张Open-Falcon的监控效果图,监控效果不错,但都是需要自己动手配置出来的:
开源运维监控open-falcon的快速部署
一、部署前准备
1、在Centos7系统上安装Docker(如果不在docker下部署可以省略这一步)
yum update -y
yum install docker epel-release -y
启动docker
systemctl enable docker
systemctl start docker
2、安装GO(用于编译falcon-plus)
上网获取最新版本的go程序包:https://studygolang.com/dl
下载并安装
mkdir -p /usr/local/gopath
cd /usr/local
wget https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz
tar -xvf go1.11.linux-amd64.tar.gz
配置环境变量
在/etc/profile中添加
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
3、安装git:yum -y install git
如果git clone下载出错,还需要更新一下curl(因为git下载本质上用的是curl):yum update -y nss curl libcurl
二、Docker模式部署
1、部署mysql

创建mysql卷目录

mkdir -p /home/work/mysql-data
chmod -R 666 /home/work/mysql-data

启动mysql容器

docker run -itd \
    --name falcon-mysql \
    -v /home/work/mysql-data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=test123456 \
    -p 3306:3306 \
    mysql:5.7

初始化mysql数据并运行

cd /tmp && \
git clone --depth=1 https://github.com/open-falcon/falcon-plus && \
cd /tmp/falcon-plus/ && \
for x in `ls ./scripts/mysql/db_schema/*.sql`; do
    echo init mysql table $x ...;
    docker exec -i falcon-mysql mysql -uroot -ptest123456 < $x;
done

rm -rf /tmp/falcon-plus/

2、部署redis
docker run --name falcon-redis -p6379:6379 -d redis:4-alpine3.8

3、部署falcon-plus组合模块

拉取镜像 hub.docker.com/openfalcon

docker pull openfalcon/falcon-plus:v0.2.1

运行 falcon-plus 容器

docker run -itd --name falcon-plus \
     --link=falcon-mysql:db.falcon \
     --link=falcon-redis:redis.falcon \
     -p 8433:8433 \
     -p 8080:8080 \
     -p 6030:6030 \
     -e MYSQL_PORT=root:test123456@tcp\(db.falcon:3306\) \
     -e REDIS_PORT=redis.falcon:6379  \
     -v /home/work/open-falcon/data:/open-falcon/data \
     -v /home/work/open-falcon/logs:/open-falcon/logs \
     openfalcon/falcon-plus:v0.2.1

启动所有 falcon 后台模块, 如 graph,api,agent等

docker exec falcon-plus sh ctrl.sh start \
        graph hbs judge transfer nodata aggregator agent gateway api alarm

以上运行容器只放开了三个端口8433(transfer服务端口) 、8080(Falcon的http端口)、6030(heartbeat心跳端口),其他需要开放的端口需要时具体配置(主要是分布式部署的情况下)。

补充说明:其实将源码https://github.com/open-falcon/falcon-plus下载,也能看到Dockerfile文件,如果想将最新源码构建docker镜像也是很方便的,如:docker build -t falcon-plus:v0.2.2 .

4、分布式启用部分模块(如agent)
docker exec falcon-plus sh ctrl.sh start/stop/restart agent
适用于集群部署的docker环境,一个docker实例就启用一个模块的情况。

5、查看模块状态及日志

check status of backend modules

docker exec falcon-plus ./open-falcon check

or you can check logs at /home/work/open-falcon/logs/ in your host

ls -l /home/work/open-falcon/logs/

以上部署完成后,在linux防火墙不限制端口的情况下,应该就能看到Falcon服务的启动(访问http://{IP}:8080)
开源运维监控open-falcon的快速部署

6、部署falcon-dashboard(前端页面)
docker run -itd --name falcon-dashboard \

    -p 8081:8081 \
    --link=falcon-mysql:db.falcon \
    --link=falcon-plus:api.falcon \
    -e API_ADDR=http://api.falcon:8080/api/v1 \
    -e PORTAL_DB_HOST=db.falcon \
    -e PORTAL_DB_PORT=3306 \
    -e PORTAL_DB_USER=root \
    -e PORTAL_DB_PASS=test123456 \
    -e PORTAL_DB_NAME=falcon_portal \
    -e ALARM_DB_HOST=db.falcon \
    -e ALARM_DB_PORT=3306 \
    -e ALARM_DB_USER=root \
    -e ALARM_DB_PASS=test123456 \
    -e ALARM_DB_NAME=alarms \
    -w /open-falcon/dashboard openfalcon/falcon-dashboard:v0.2.1  \
   './control startfg'

现在就可以访问页面了,第一次登录需要注册账号,登录后的效果如下(默认只显示一个Endpoints):
开源运维监控open-falcon的快速部署

 7、构建docker镜像
以上是直接用网上提供的镜像,你也可以将最新的源码构建成最新的镜像:

Building falcon-plus

cd /tmp && \
git clone https://github.com/open-falcon/falcon-plus && \
cd /tmp/falcon-plus/ && \
docker build -t falcon-plus:v0.2.1 .

Building falcon-dashboard

cd /tmp && \
git clone https://github.com/open-falcon/dashboard  && \
cd /tmp/dashboard/ && \
docker build -t falcon-dashboard:v0.2.1 .

三、linux下构建和部署
以上是Docker情况下部署,但我们需要注意,像代理agent模块不是所有情况都适合用docker部署的,比如我们就需要在linux下部署代理以监控linux机器。这时候我们可以编译源码并生成安装包,将安装包拷到不同的机器上进行模块部署。

1、下载源码
mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/falcon-plus.git

2、安装数据库并初始化

安装数据库

yum install -y redis
yum install -y mysql-server

初始化数据

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 127.0.0.1 -u root -p < 5_alarms-db-schema.sql

3、编译打包相关模块
cd $GOPATH/src/github.com/open-falcon/falcon-plus/

make编译所有模块

make all

make编译其中一个模块(如只编译agent)

make agent

pack打包所有模块

make pack

打完包的格式为open-falcon-vx.x.x.tar.gz

4、安装及使用相关模块

解压和创建工作目录

export WorkDir="$HOME/open-falcon"
mkdir -p $WorkDir
tar -xzvf open-falcon-vx.x.x.tar.gz -C $WorkDir
cd $WorkDir

启动和检查模块状态

cd $WorkDir

启动所有模块(如需修改配置文件请先设置后启动,在相应模块目录的config目录下)

./open-falcon start

只启动指定模块(如agent)

./open-falcon [start|stop|restart|check|monitor|reload] module

./open-falcon start agent

检查模块status

./open-falcon check

5、单模块编译和使用(如agent)
以上是整体模块编译,其实还支持只编译和使用一个模块的情况
mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/falcon-plus.git
cd falcon-plus/modules/agent
go get
./control build
./control start

本质上启动进程 ./falcon-agent -c cfg.json > var/app.log

启动完后通过访问 http://localhost:1988

 所以调用agent模块,也别忘了先设置好配置文件cfg.json

{

"debug": true,
"hostname": "",
"ip": "",
"plugin": {
    "enabled": false,
    "dir": "./plugin",
    "git": "https://github.com/open-falcon/plugin.git",
    "logs": "./logs"
},
"heartbeat": {
    "enabled": true,
    "addr": "172.16.1.162:6030",
    "interval": 60,
    "timeout": 1000
},
"transfer": {
    "enabled": true,
    "addrs": [
        "172.16.1.162:8433"
    ],
    "interval": 10,
    "timeout": 1000
},
"http": {
    "enabled": true,
    "listen": ":1988",
    "backdoor": false
},
"collector": {
    "ifacePrefix": ["eth", "em"],
    "mountPoint": []
},
"default_tags": {
},
"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
}

}

6、部署dashboard
这个部署过程内容比较多,在这就不细说了,可以参照官网https://github.com/open-falcon/dashboard ,但是既然部署麻烦,dashboard完全就可以通过docker来实现。

四、Windows下构建和使用agent代理
虽然我们把监控系统部署在linux环境或Docker中,但是要监控Windows,还得有windows代理,网上有提供编译好的包:
https://github.com/freedomkk-qfeng/windows-agent/releases
但我们有时候还得亲力亲为,因为别人编译好的包可能不是最新版本的。
关于windows的代理网上有四种方案(http://book.open-falcon.org/zh_0_2/usage/win.html),我们选择最后一种方案,原因是支持go,并且是最新维护的(汽车之家提供的那一版我也编译通过并使用成功,但是只支持Python2.7或更早版的,而且编译过程会复杂一些)。下面介绍具体步骤:
1、下载golang windows版和git的windows版,然后安装。
https://studygolang.com/dl
https://git-scm.com/download/win

2、安装GOLANG到D:Go,配置环境变量(goroot和gopath要不同路径)
我的是GOROOT为D:Go,GOPATH为D:UserGOPATH ,在系统变量Path中添加 %GOROOT%bin;

3、再下载依赖包(正常没有这一步,但由于我无法*到google,这就需要手动下载以下包,以下命令可以在CMD中进行)
git clone https://github.com/googleapis/google-cloud-go.git %GOPATH%/src/cloud.google.com
xcopy "%GOPATH%/src/cloud.google.com/civil" "%GOPATH%/src/cloud.google.com/go/civil" /y /e /i /q

git clone https://github.com/golang/net.git %GOPATH%/src/golang.org/x/net
git clone https://github.com/golang/sys.git %GOPATH%/src/golang.org/x/sys
git clone https://github.com/golang/tools.git %GOPATH%/src/golang.org/x/tools
git clone https://github.com/golang/text.git %GOPATH%/src/golang.org/x/text
git clone https://github.com/golang/crypto.git %GOPATH%/src/golang.org/x/crypto

4、下载要编译的windows-agent源码
git clone https://github.com/freedomkk-qfeng/windows-agent %GOPATH%/src/github.com/freedomkk-qfeng/windows-agent

5、编译
cd %GOPATH%/src/github.com/freedomkk-qfeng/windows-agent
go get ./...
go build -o windows-agent.exe
不出意外就可以编译成功,如果提示还缺包,那就继续上网找。

6、编译完后,就可以使用windows-agent.exe,具体怎么用可以看https://github.com/freedomkk-qfeng/windows-agent
由于网上的使用过程我觉得不够自动,我自己又写了个批处理,调用也是nssm.exe(一个注册windows服务的工具),需要将批处理脚本、nssm.exe、windows-agent.exe、配置文件cfg.json放在一个目录下。

(1)install安装agent服务脚本
@echo off
cd /d %~dp0
.nssm.exe install windows-agent %~dp0windows-agent.exe %~dp0
(2)start启动agent脚本
@echo off
cd /d %~dp0
.nssm.exe start windows-agent
(3)stop停止agent脚本
@echo off
cd /d %~dp0
.nssm.exe stop windows-agent
(4)uninstall卸载agent服务脚本
@echo off
cd /d %~dp0
.nssm.exe stop windows-agent
.nssm.exe remove windows-agent confirm
pause
如果是windows7/10,运行以上脚本都需要以管理员身份运行。

五、其他监控插件
       以上提到监控都是针对OS(Linux/Windows),而Open-falcon强大的一点是有着大量的监控插件支持,所有的第三方监控插件只要连通agent代理服务(监控插件或程序最好与本机agent服务连通,否则push可能会被拒绝连接),就能获取更多的监控数据,如Mysql、Redis、Java JMX、Nginx、Docker等。本文只举例JMX和Mysql,其他的监控插件原理一样。

1、Java JMX监控

(1)编译前准备工作
需要准备JDK环境,并配置JAVA_HOME环境变量,在这就不细说了。
准备Maven环境:到http://maven.apache.org/download.cgi中找到最新版的Maven包
cd /usr/local/src/
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
tar zxf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/maven3

vi /etc/profile 添加环境变量

export M2_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

让环境变量立即生效

source /etc/profile

确认maven生效,验证版本

mvn -v

(2)下载并编译jmxmon插件源码:
git clone https://github.com/toomanyopenfiles/jmxmon.git
cd jmxmon

编译(强制更新依赖包,并生成jar文件)

mvn -U clean package
开始编译,一个漫长的等待:
开源运维监控open-falcon的快速部署

 编译完后,生成target目录,将主要文件(conf.properties、control、jar包、log4j.properties)打包jar.gz包,就能到对应环境去部署,如果认为编译麻烦,网上也提供了编译好的包:https://github.com/toomanyopenfiles/jmxmon/releases/tag/v0.0.2

(3)使用jmxmon插件
首先需要在Java服务中开放JMX监听端口,我们以linux下的tomcat为例,在catalina.sh启动文件中添加JMX监控配置:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
解压jmxmon插件包
tar -xvf jmxmon-v0.0.2.tar.gz
cd jmxmon-v0.0.2
mv conf.example.properties conf.properties
修改配置文件conf.properties,内容说明如下:

工作目录用来存放jmxmon的临时缓存文件,注意不要修改此目录下的文件

workDir=./

需要监听的本地jmx端口,支持监听多个端口,多端口用逗号分隔

jmx.ports=9008

本地agent的上报url,如果使用open-falcon的默认配置,则这里不需要改变

agent.posturl=http://localhost:1988/v1/push

可选项:上报给open-falcon的endpoint,默认值为本机hostname。不建议修改

hostname=

可选项:上报给open-falcon的上报间隔,默认值60,单位秒。不建议修改

step=

启动监听(前掉是本机的agent模块已启动):
./control start

查看日志,或者cat var/app.log以确认程序是否正常启动

sh control tail
过几分钟后,通过前端页面就能看到新获取的JMX监听数据:
开源运维监控open-falcon的快速部署

2、Mysql监控
mymon(MySQL-Monitor) 是Open-Falcon用来监控MySQL数据库运行状态的一个插件,采集包括global status, global variables, slave status以及innodb status等MySQL运行状态信息。

(1)获取源码进行编译

Build

go get -u github.com/open-falcon/mymon
cd $GOPATH/src/github.com/open-falcon/mymon
make
(2)修改配置文件
cd $GOPATH/src/github.com/open-falcon/mymon/etc/
vim myMon.cfg

[default]
basedir = . # 工作目录
log_dir = ./fixtures # 日志目录,默认日志文件为myMon.log,旧版本有log_file项,如果同时设置了,会优先采用log_file
ignore_file = ./falconignore # 配置忽略的metric项
snapshot_dir = ./snapshot # 保存快照(process, innodb status)的目录
snapshot_day = 10 # 保存快照的时间(日)
log_level = 5 # 日志级别[RFC5424]

0 LevelEmergency

1 LevelAlert

2 LevelCritical

3 LevelError

4 LevelWarning

5 LevelNotice

6 LevelInformational

7 LevelDebug

falcon_client=http://127.0.0.1:1988/v1/push # falcon agent连接地址

[mysql]
user=root # 数据库用户名
password=1tIsB1g3rt # 修改为您的数据库密码
host=127.0.0.1 # 数据库连接地址
port=3306 # 数据库端口

(3)加入定时器

Add to crontab

echo ' * cd $(WORKPATH) && ./mymon -c etc/myMon.cfg' > /etc/cron.d/mymon
表示每分钟执行一次mymon(即每分钟push一次数据到agent服务)。需要强调的是$(WORKPATH)要换成具体路径,这个路径不要用环境变量,因为crontab默认不加载/etc/profile和~/.bash_profile,既不识别用户级的环境变量。
过几分钟后,通过前端页面就能看到新获取的mysql监听数据:
开源运维监控open-falcon的快速部署


作者:smooth-z
来源:CSDN
原文:https://blog.csdn.net/smooth00/article/details/86157321
版权声明:本文为博主原创文章,转载请附上博文链接!

上一篇:分布式文件mfs 高可用集群


下一篇:开源APM监控Pinpoint的快速部署和使用