开源运维监控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张图片

一、部署前准备

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)

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的快速部署_第2张图片

 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:\User\GOPATH ,在系统变量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的快速部署_第3张图片

 编译完后,生成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的快速部署_第4张图片

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的快速部署_第5张图片

你可能感兴趣的:(#,性能测试,#,性能监控,Docker与测试环境,性能监控技术)