開源運維監控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監聽數據:

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容