===============================================
2019/4/28_第1次修改 ccb_warlock
更新說明:
2019/4/29:調整防火牆的配置內容
===============================================
距離上次整理open-falcon的部署手冊(https://www.cnblogs.com/straycats/p/7199209.html)已經一年多了,當時才剛接觸linux,很多東西整理的並不是很合理(比如一些操作的描述),一些部署的內容也不是很嚴謹(比如如何實現開機自啟)。
正好最近在做監控系統的選型,open-falcon又被我拿出來作為試驗的目標。介於后來0.2.1與0.2.0的一些部署上的差異,我決定重新針對0.2.1整理一份部署手冊,供路人一起參考。
由於新文檔變更了之前文檔的一些部署路徑及配置內容,建議基礎能力還不是很強的同學可以忽略我17年整理的0.2.0版本的部署手冊,直接看這份手冊。
部署一套系統之前,首先關注整個架構,這里直接把官方的圖盜過來。
一、環境准備
操作系統:centos 7.6(www.centos.org
虛擬機IP:192.168.12.55
1.1 配置防火牆
# 為了方便可以選擇直接關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
當然如果你需要開啟防火牆,那么開放幾個業務上需要開放的端口。
服務模塊 | 功能 | 端口 |
hbs | 連接所有agent的心跳服務 | 6030 |
transfer | 接收agent發送的監控數據 | 8433 |
dashboard | 頁面 | 8081 |
firewall-cmd --add-port=6030/tcp --permanent firewall-cmd --add-port=8433/tcp --permanent firewall-cmd --add-port=8081/tcp --permanent
firewall-cmd --reload
1.2 安裝wget、vim
yum install -y wget vim
1.3 安裝git
yum install -y git
安裝結束后,確認是否滿足官方要求的Git >= 1.7.5
git version
1.4 安裝golang
# 通過fedora的epel倉庫來安裝golang
yum install -y epel-release
yum install -y golang
安裝結束后,確認是否滿足官方要求的Go >= 1.6
go version
1.5 安裝redis
# 通過fedora的epel倉庫來安裝redis
yum install -y epel-release
yum install -y redis
systemctl start redis
systemctl enable redis
1.6 安裝mysql 5.6
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install -y mysql-server
systemctl start mysql
PS.通過這種方式的mysql是默認開機啟動的。
1.7 設置臨時變量(臨時生效的變量,換一個會話(shell終端)這個變量就沒有了)
export GOROOT=/usr/lib/golang
export GOPATH=/opt/git
1.8 從github上拉取后端(open-falcon)的源碼
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
PS.通過git clone經常龜速,所以可以通過本地獲取源碼后,將源碼文件上傳到/opt/git/src/github.com/open-falcon/falcon-plus目錄下。
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
PS.在運行“mysql -h..................”時會提示“Enter password”,如果mysql的root沒有設置密碼,回車即可。
1.10 編譯后端的源碼並打包
cd $GOPATH/src/github.com/open-falcon/falcon-plus
make all
PS.17年部署0.2.0時還需要手動獲取rrdtool工具包,現在(19年)的版本(0.2.1)試下來已經不用了.
make pack
打包完成后,/opt/git/src/github.com/open-falcon/falcon-plus/目錄下多了剛才打的壓縮包“open-falcon-v0.2.1.tar.gz”(因為整理手冊的時候版本已經到了0.2.1)。
二、部署后端
v0.2后端分為下面幾個服務模塊:
功能 | |
---|---|
alarm | alarm模塊是處理報警event的,judge產生的報警event寫入redis,alarm從redis讀取處理,並進行不同渠道的發送。 |
agent | agent用於采集機器負載監控指標,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push給Transfer。agent與Transfer建立了長連接,數據發送速度比較快,agent提供了一個http接口/v1/push用於接收用戶手工push的一些數據,然后通過長連接迅速轉發給Transfer |
aggregator | 集群聚合模塊。聚合某集群下的所有機器的某個指標的值,提供一種集群視角的監控體驗。 |
api | api模塊提供統一的restAPI操作接口。比如:api組件接收查詢請求,根據一致性哈希算法去相應的graph實例查詢不同metric的數據,然后匯總拿到的數據,最后統一返回給用戶。 |
gateway | 沒有遇到機房分區問題,可以忽略此模塊。 |
graph | graph是存儲繪圖數據的組件。graph組件 接收transfer組件推送上來的監控數據,同時處理api組件的查詢請求、返回繪圖數據。 |
hbs | HBS(Heartbeat Server)心跳服務器,公司所有agent都會連到HBS,每分鍾發一次心跳請求。 |
judge | 用於告警判斷,agent將數據push給Transfer,Transfer不但會轉發給Graph組件來繪圖,還會轉發給Judge用於判斷是否觸發告警。 |
nodata | nodata用於檢測監控數據的上報異常。nodata和實時報警judge模塊協同工作,過程為: 配置了nodata的采集項超時未上報數據,nodata生成一條默認的模擬數據;用戶配置相應的報警策略,收到mock數據就產生報警。采集項上報異常檢測,作為judge模塊的一個必要補充,能夠使judge的實時報警功能更加可靠、完善。 |
task | task是監控系統一個必要的輔助模塊。定時任務,實現了如下幾個功能:index更新(包括圖表索引的全量更新 和 垃圾索引清理)、falcon服務組件的自身狀態數據采集(采集了transfer、graph、task這三個服務的內部狀態數據)、falcon自檢控任務 |
transfer | 數據轉發服務。它接收agent上報的數據,然后按照哈希規則進行數據分片、並將分片后的數據分別push給graph&judge等組件。 |
2.1 設置臨時變量
export BACKSPACE=/opt/open-falcon/back
2.2 創建目錄
mkdir -p $BACKSPACE
2.3 解壓包
cd $GOPATH/src/github.com/open-falcon/falcon-plus
tar -xzvf open-falcon-v0.2.1.tar.gz -C $BACKSPACE
2.4 修改配置文件cfg.json
根據本教程的配置,需要修改模塊如下:
配置文件所在路徑 | |
---|---|
aggregator | /opt/open-falcon/back/aggregator/config/cfg.json |
graph | /opt/open-falcon/back/graph/config/cfg.json |
hbs | /opt/open-falcon/back/hbs/config/cfg.json |
nodata | /opt/open-falcon/back/nodata/config/cfg.json |
api | /opt/open-falcon/back/api/config/cfg.json |
alarm | /opt/open-falcon/back/alarm/config/cfg.json |
vim /opt/open-falcon/back/aggregator/config/cfg.json
PS.我部署mysql的root密碼為空,所以不需要填“password”;若mysql的root密碼不為空,則用root密碼替換“password”。
vim /opt/open-falcon/back/graph/config/cfg.json
PS.我部署mysql的root密碼為空,所以不需要填“password”;若mysql的root密碼不為空,則用root密碼替換“password”。
vim /opt/open-falcon/back/hbs/config/cfg.json
PS.我部署mysql的root密碼為空,所以不需要填“password”;若mysql的root密碼不為空,則用root密碼替換“password”。
vim /opt/open-falcon/back/nodata/config/cfg.json
PS.我部署mysql的root密碼為空,所以不需要填“password”;若mysql的root密碼不為空,則用root密碼替換“password”。
vim /opt/open-falcon/back/api/config/cfg.json
PS.我部署mysql的root密碼為空,所以不需要填“password”;若mysql的root密碼不為空,則用root密碼替換“password”。
vim /opt/open-falcon/back/alarm/config/cfg.json
PS.我部署mysql的root密碼為空,所以不需要填“password”;若mysql的root密碼不為空,則用root密碼替換“password”。
2.5 啟動后端
cd /opt/open-falcon/back
./open-falcon start
2.6 設置開機啟動
請參考“四、設置開機啟動”。
2.7 其他操作命令
open-falcon還提供了下面這些命令:
cd /opt/open-falcon/back
./open-falcon check
cd /opt/open-falcon/back
./open-falcon stop
cd /opt/open-falcon/back
./open-falcon start alarm
cd /opt/open-falcon/back
./open-falcon stop alarm
cd /opt/open-falcon/back
./open-falcon restart alarm
三、部署前端
3.1 設置臨時變量
#
export FRONTSPACE=/opt/open-falcon/front
3.2 創建目錄
mkdir -p $FRONTSPACE
cd $FRONTSPACE git clone https://github.com/open-falcon/dashboard.git
PS.通過git clone經常龜速,所以可以通過本地獲取源碼后,將源碼文件上傳到/opt/open-falcon/front/dashboard目錄下。
3.4 安裝依賴
yum install -y python-virtualenv yum install -y python-devel yum install -y openldap-devel yum install -y mysql-devel yum groupinstall -y "Development tools"
cd $FRONTSPACE/dashboard virtualenv ./env
./env/bin/pip install -r pip_requirements.txt
PS.官方教程中使用了下面的命令安裝依賴包(指定了安裝包的源地址)
./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple
3.5 修改配置
根據本教程的配置,dashboard的配置文件在/opt/open-falcon/front/dashboard/rrd/config.py
爬坑點:
原本不接入LDAP、數據庫root賬號密碼為空不需要修改配置,但是官方給出的配置文件在這里留了一個坑:PORTAL_DB的用戶名/密碼初始為falcon/falcon。
這個坑最終會導致dashboard登錄后的“HostGroups”、“Templates”、“Expressions”、“Nodata”,下面提供解決方案,也就是將錯誤的初始配置改過來。
vim /opt/open-falcon/front/dashboard/rrd/config.py +33
將portal的數據庫用戶名改為root,密碼改為空,wq保存。
cd $FRONTSPACE/dashboard bash control start
cd /opt/open-falcon/front/dashboard
bash control status
cd /opt/open-falcon/front/dashboard
bash control stop
cd /opt/open-falcon/front/dashboard
./env/bin/python wsgi.py
由於open-falcon沒有service實現開機啟動,所以需要額外找方案來解決這個問題。
這里提供一套方案:通過進程守護服務(Supervisor)實現open-falcon的開機啟動。
yum install -y python-setuptools
easy_install supervisor
mkdir -p /etc/supervisor/conf.d
echo_supervisord_conf > /etc/supervisor/supervisord.conf
vim /etc/supervisor/supervisord.conf
將下面的內容添加到supervisord.conf內,wq保存。
[include]
files = conf.d/*.conf
mkdir -p /opt/sh
vim /opt/sh/open-falcon-startup.sh
將下面的內容添加到open-falcon-startup.sh內,wq保存。
#!/bin/bash sleep 30s && /opt/open-falcon/back/open-falcon start
PS.引入啟動腳本(延遲30s啟動)的原因:在open-falcon啟動時,mysql沒有啟動完成,將會導致部分服務啟動失敗,而supervisord又檢測不到open-falcon每個服務的進程,結果導致open-falcon部分服務(aggregator、agent、gateway、api、alarm)啟動失敗。
vim /etc/supervisor/conf.d/open-falcon-back.conf
將下面的內容添加到open-falcon-back.conf內,wq保存。
[program:open-falcon-back] command=/bin/bash /opt/sh/open-falcon-startup.sh ;運行程序的命令 directory=/opt/open-falcon/back ;命令執行的目錄 user=root ; 進程執行的用戶身份 autostart=true ;在supervisord啟動時運行該程序 autorestart=true ;程序異常退出后自動重啟 stdout_logfile=/var/log/open-falcon-back.out.log ;輸出日志文件 stdout_logfile_maxbytes=10MB ;輸出日志文件大小(10MB) stdout_logfile_backups=5 ;輸出日志文件備份數 stderr_logfile=/var/log/open-falcon-back.err.log ;錯誤日志文件 stderr_logfile_maxbytes=10MB ;錯誤日志文件大小(10MB) stderr_logfile_backups=5 ;錯誤日志文件備份數
vim /etc/supervisor/conf.d/open-falcon-front.conf
將下面的內容添加到open-falcon-front.conf內,wq保存。
[program:open-falcon-front] command=/bin/bash /opt/open-falcon/front/dashboard/control start ;運行程序的命令 directory=/opt/open-falcon/front/dashboard ;命令執行的目錄 user=root ; 進程執行的用戶身份 autostart=true ;在supervisord啟動時運行該程序 autorestart=true ;程序異常退出后自動重啟 stdout_logfile=/var/log/open-falcon-front.out.log ;輸出日志文件 stdout_logfile_maxbytes=10MB ;輸出日志文件大小 stdout_logfile_backups=5 ;輸出日志文件備份數 stderr_logfile=/var/log/open-falcon-front.err.log ;錯誤日志文件 stderr_logfile_maxbytes=10MB ;錯誤日志文件大小 stderr_logfile_backups=5 ;錯誤日志文件備份數
vim /usr/lib/systemd/system/supervisord.service
將下面的內容添加到supervisord.service內,wq保存。
[Unit] Description=Supervisor [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
systemctl start supervisord
systemctl enable supervisord
supervisorctl status
dashboard沒有默認創建任何賬號(包括管理員賬號),需要通過頁面進行注冊賬號。
注冊用戶名為root的賬號(第一個帳號名稱為root的用戶,會被自動設置為超級管理員)。
注冊賬號能夠被任何打開dashboard頁面的人注冊,有時候我們不允許任何人都可以隨便訪問監控數據。所以當創建完root賬號(系統管理員)后,可以關閉注冊賬號功能。沒有接入LDAP的話,可以通過root賬號增加用戶賬號。
配置文件所在路徑 | |
---|---|
api | /opt/open-falcon/back/api/config/cfg.json |
vim /opt/open-falcon/back/api/config/cfg.json
將signup_disable配置項修改為true,wq保存。
cd /opt/open-falcon/back
./open-falcon restart api
-
-
沒有接入LDAP,不允許用戶隨意創建賬號登錄,讓管理員用root賬號創建用戶賬號;
-
接入LDAP,直接使用LDAP賬號登錄;
參考資料
1.https://book.open-falcon.org/zh_0_2/quick_install/index.html