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

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

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

一、部署前准备

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心跳端口),其他需要开放的端口需要时具体配置(主要是分布式部署的情况下)。

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):

 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服务脚本

@echooffcd/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

开始编译,一个漫长的等待:

编译完后,生成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.gzcdjmxmon-v0.0.2mv 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监听数据:

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监听数据:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容