Open-Falcon部署


 

 

概述

一、 介紹

  監控系統是整個運維環節,乃至整個產品生命周期中最重要的一環,事前及時預警發現故障,事后提供翔實的數據用於追查定位問題。監控系統作為一個成熟的運維產品,業界有很多開源的實現可供選擇。當公司剛剛起步,業務規模較小,運維團隊也剛剛建立的初期,選擇一款開源的監控系統,是一個省時省力,效率最高的方案。之后,隨着業務規模的持續快速增長,監控的對象也越來越多,越來越復雜,監控系統的使用對象也從最初少數的幾個SRE,擴大為更多的DEVS,SRE。這時候,監控系統的容量和用戶的“使用效率”成了最為突出的問題。

  監控系統業界有很多傑出的開源監控系統。我們在早期,一直在用zabbix,不過隨着業務的快速發展,以及互聯網公司特有的一些需求,現有的開源的監控系統在性能、擴展性、和用戶的使用效率方面,已經無法支撐了。

  因此,我們在過去的一年里,從互聯網公司的一些需求出發,從各位SRE、SA、DEVS的使用經驗和反饋出發,結合業界的一些大的互聯網公司做監控,用監控的一些思考出發,設計開發了小米的監控系統:Open-Falcon。

二、特點

  • 數據采集免配置agent自發現、支持Plugin、主動推送模式
  • 容量水平擴展:生產環境每秒50萬次數據收集、告警、存儲、繪圖,可持續水平擴展
  • 告警策略自發現Web界面、支持策略模板、模板繼承和覆蓋、多種告警方式、支持回調動作。
  • 告警設置人性化:支持最大告警次數、告警級別設置、告警恢復通知、告警暫停、不同時段不同閾值、支持維護周期,支持告警合並。
  • 歷史數據高效查詢:秒級返回上百個指標一年的歷史數據。
  • Dashboard人性化:多維度的數據展示,用戶自定義Dashboard等功能。
  • 架構設計高可用:整個系統無核心單點,易運維,易部署

三、架構圖

 

 

備注:虛線所在的aggregator組件還在設計開發階段。

每台服務器,都有安裝falcon-agent,falcon-agent是一個golang開發的daemon程序,用於自發現的采集單機的各種數據和指標,這些指標包括不限於以下幾個方面,共計200多項指標。

  • CPU相關
  • 磁盤相關
  • IO
  • Load
  • 內存相關
  • 網絡相關
  • 端口存活、進程存活
  • ntp offset(插件)
  • 某個進程資源消耗(插件)
  • netstat、ss 等相關統計項采集
  • 機器內核配置參數

  只要安裝了falcon-agent的機器,就會自動開始采集各項指標,主動上報,不需要用戶在server做任何配置(這和zabbix有很大的不同),這樣做的好處,就是用戶維護方便,覆蓋率高。當然這樣做也會server端造成較大的壓力,不過open-falcon的服務端組件單機性能足夠高,同時都可以水平擴展,所以自動多采集足夠多的數據,反而是一件好事情,對於SRE和DEV來講,事后追查問題,不再是難題。

另外,falcon-agent提供了一個proxy-gateway,用戶可以方便的通過http接口,push數據到本機的gateway,gateway會幫忙高效率的轉發到server端。

falcon-agent,可以在我們的github上找到:https://github.com/open-falcon/agent

四、數據流程圖

 

 

部署Open-falcon

一、環境准備

系統環境:CentOS 7

1. 搭建阿里雲yum

[root@Open-falcon ~]# hostname Open-falcon

[root@Open-falcon ~]# cd /etc/yum.repos.d/

[root@Open-falcon yum.repos.d]# mkdir bak && mv * ./bak

[root@Open-falcon yum.repos.d]# curl -O

http://mirrors.aliyun.com/repo/Centos-7.repo

[root@Open-falcon yum.repos.d]# yum clean all

[root@Open-falcon yum.repos.d]# yum makecache

[root@Open-falcon yum.repos.d]# yum -y update    //更新所有包

 

2. 安裝Go語言環境

[root@Open-falcon ~]# yum -y install epel-release     //因為官方yum和阿里yum都沒有go的安裝包,故只能通過fedora的epel倉庫來安裝

[root@Open-falcon ~]# yum -y install go

 

 

#安裝之后確認安裝后的版本是不是>=1.6版本(官方需求)

[root@Open-falcon ~]# go version

go version go1.8.3 linux/amd64

 

 

 

3. 安裝Redis

由於部署go時已經安裝了epel,故直接執行下面的安裝命令

 

[root@Open-falcon ~]# yum -y install redis

[root@Open-falcon ~]# systemctl start redis

[root@Open-falcon ~]# systemctl enable redis    //開機啟動

[root@Open-falcon ~]# systemctl status redis    //查看狀態

 redis.service - Redis persistent key-value database

   Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)

  Drop-In: /etc/systemd/system/redis.service.d

           └─limit.conf

   Active: active (running) since Sun 2018-04-29 09:30:00 EDT; 2h 24min ago

 Main PID: 35732 (redis-server)

   CGroup: /system.slice/redis.service

           └─35732 /usr/bin/redis-server 127.0.0.1:6379

 

 

 

4. 安裝Mysql

包名:mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz(331MB)

 

[root@Open-falcon ~]# tar xf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

[root@Open-falcon ~]# cp -r mysql-5.6.40-linux-glibc2.12-x86_64 -C /usr/local/mysql

[root@Open-falcon ~]# useradd -M -s /sbin/nologin mysql

[root@Open-falcon ~]# chown mysql:mysql /usr/local/mysql/ -R

[root@Open-falcon ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

[root@Open-falcon ~]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

[root@Open-falcon ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@Open-falcon ~]# chmod +x /etc/init.d/mysqld

[root@Open-falcon ~]# /etc/init.d/mysqld start

[root@Open-falcon ~]# netstat -antup | grep :::3306

tcp6       0      0 :::3306                 :::*                    LISTEN      60648/mysqld  

 

5. 初始化Mysql數據庫

[root@Open-falcon ~]# mkdir falcon-plus

[root@Open-falcon ~]# cd falcon-plus

[root@Open-falcon falcon-plus]# unzip falcon-plus-master.zip

[root@Open-falcon falcon-plus]# cd falcon-plus-master/scripts/mysql/db_schema/

[root@Open-falcon db_schema]# ll

total 24

-rw-r--r--. 1 root root 1952 Apr  8 02:44 1_uic-db-schema.sql

-rw-r--r--. 1 root root 7573 Apr  8 02:44 2_portal-db-schema.sql

-rw-r--r--. 1 root root 3391 Apr  8 02:44 3_dashboard-db-schema.sql

-rw-r--r--. 1 root root 1807 Apr  8 02:44 4_graph-db-schema.sql

-rw-r--r--. 1 root root 2560 Apr  8 02:44 5_alarms-db-schema.sql

 

[root@Open-falcon db_schema]# mysql -u root -p < 1_uic-db-schema.sql

[root@Open-falcon db_schema]# mysql -u root -p < 2_portal-db-schema.sql

[root@Open-falcon db_schema]# mysql -u root -p < 3_dashboard-db-schema.sql

[root@Open-falcon db_schema]# mysql -u root -p < 4_graph-db-schema.sql

[root@Open-falcon db_schema]# mysql -u root -p < 5_alarms-db-schema.sql

 

[root@Open-falcon db_schema]# mysql -uroot -e 'show databases'

+--------------------+

| Database           |

+--------------------+

| information_schema |

| alarms             |

| dashboard          |

| falcon_portal      |

| graph              |

| mysql              |

| performance_schema |

| test               |

| uic                |

+--------------------+

 

 

6. 安裝Open-falcon(兩種安裝方式)

a. 源碼安裝

參考:

https://book.open-falcon.org/zh_0_2/quick_install/prepare.html

b. 二進制版本安裝

[root@Open-falcon ~]# WORKSPACE=/opt/work/

[root@Open-falcon ~]# mkdir $WORKSPACE

[root@Open-falcon ~]# cd /opt/work/

[root@Open-falcon work]# tar xf open-falcon-v0.2.1.tar.gz

[root@Open-falcon work]# rm -f open-falcon-v0.2.1.tar.gz

 

 

二、部署后端

a. 檢查配置文件中數據庫賬號密碼是否正確

[root@Open-falcon work]# vim aggregator/config/cfg.json

"addr": "root:@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true",

 

 

檢查以上內容的 root:password(如果沒有密碼就去掉password),服務器IP地址及端口

檢查的模塊配置文件列表如下:

模塊

配置文件所在路徑

aggregator   

/opt/work/aggregator/config/cfg.json

graph

/opt/work/graph/config/cfg.json

hbs

/opt/work/hbs/config/cfg.json

nodata

/opt/work/nodata/config/cfg.json

api

/opt/work/api/config/cfg.json

alarm

/opt/work/alarm/config/cfg.json

 

b. 啟動

[root@Open-falcon work]# ./open-falcon

Usage:

  open-falcon [flags]

  open-falcon [command]

Available Commands:

  check       Check the status of Open-Falcon modules

  help        Help about any command

  monitor     Display an Open-Falcon module's log

  reload      Reload an Open-Falcon module's configuration file

  restart     Restart Open-Falcon modules

  start       Start Open-Falcon modules

  stop        Stop Open-Falcon modules

 

 

 

三、部署前端

1. 創建工作目錄

[root@Open-falcon ~]# export FRONTSPACE=/opt/front/open-falcon

[root@Open-falcon ~]# mkdir -p $FRONTSPACE

  

 

2. 解壓dashboard

[root@Open-falcon open-falcon]# unzip dashboard-master.zip

[root@Open-falcon open-falcon]# mv dashboard-master dashboard && rm -f dashboard-master.zip

 

 

3. 安裝依賴包

[root@Open-falcon open-falcon]# yum install -y python-virtualenv

[root@Open-falcon open-falcon]# yum install -y python-devel

[root@Open-falcon open-falcon]# yum install -y openldap-devel

[root@Open-falcon open-falcon]# yum install -y mysql-devel

[root@Open-falcon open-falcon]# yum -y groupinstall "Development tools"

 

[root@Open-falcon open-falcon]# cd dashboard/
[root@Open-falcon dashboard]# virtualenv ./env
[root@Open-falcon dashboard]# ./env/bin/pip install -r pip_requirements.txt

 

 

4. 修改配置

dashboard的配置文件在/opt/front/open-falcon/dashboard/rrd/config.py,需要根據實際情況對內部配置進行修改。

由於前端后台搭在一台服務器里,且暫時不接入LDAP,且數據庫root的密碼為空,故先不修改配置文件。

 

5. 啟動

a. 生產環境啟動

[root@Open-falcon dashboard]# bash control # 以下參數
start
|stop|restart|status|tail|kill9|version|pack

 

b. 開發者模式啟動

[root@Open-falcon dashboard]# ./env/bin/python wsgi.py

 

 

6. dashbord用戶管理

dashbord沒有默認創建任何賬號包括管理賬號,需要你通過頁面進行注冊賬號。

 

想擁有管理全局的超級管理員賬號,需要手動注冊用戶名為root的賬號(第一個帳號名稱為root的用戶會被自動設置為超級管理員)。

超級管理員可以給普通用戶分配權限管理。

 

小提示:注冊賬號能夠被任何打開dashboard頁面的人注冊,所以當給相關的人注冊完賬號后,需要去關閉注冊賬號功能。只需要去修改api組件的配置文件cfg.json,將signup_disable配置項修改為true,重啟api即可。當需要給人開賬號的時候,再將配置選項改回去,用完再關掉即可。

 

Open-falcon使用

一、查看監控數據

 

 

 

二、如何配置報警策略

1. 配置報警接收人

falcon的報警接收人不是一個具體的手機號,也不是一個具體的郵箱,因為手機號、郵箱都是容易發生變化的,如果變化了去修改所有相關配置那就太麻煩了。我們把用戶的聯系信息維護在一個叫 帳戶/Profile 里,以后如果要修改手機號、郵箱,只要修改自己的帳戶信息即可。報警接收人也不是單個的人,而是一個組(Teams),比如falcon這個系統的任何組件出問題了,都應該發報警給falcon的運維和開發人員,發給falcon這個團隊,這樣一來,新員工入職只要加入falcon這個Team即可;員工離職,只要從falcon這個Team刪掉即可。

瀏覽器訪問UIC,如果啟用了LDAP,那就用LDAP賬號登陸,如果沒有啟用,那就注冊一個或者找管理員幫忙開通。創建一個Team,名稱姑且叫falcon,把自己加進去,待會用來做測試。

首先修改帳戶信息,保證郵箱和手機號正確 然后添加報警組,添加成員

 


 

 

 


 

2. 創建HostGroup

比如我們要對falcon-judge這個組件做端口監控,那首先創建一個HostGroup,把所有部署了falcon-judge這個模塊的機器都塞進去,以后要擴容或下線機器的時候直接從這個HostGroup增刪機器即可,報警策略會自動生效、失效。咱們為這個HostGroup取名為:sa.dev.falcon.judge,這個名稱有講究,sa是我們部門,dev是我們組,falcon是項目名,judge是組件名,傳達出了很多信息,這樣命名比較容易管理,推薦大家這么做。

 

在往組里加機器的時候如果報錯,需要檢查portal的數據庫中host表,看里邊是否有相關機器。那host表中的機器從哪里來呢?agent有個heartbeat(hbs)的配置,agent每分鍾會發心跳給hbs,把自己的ip、hostname、agent version等信息告訴hbs,hbs負責寫入host表。如果host表中沒數據,需要檢查這條鏈路是否通暢。

3. 創建策略模板

portal最上面有個Templates鏈接,這就是策略模板管理的入口。我們進去之后創建一個模板,名稱姑且也叫:sa.dev.falcon.judge.tpl,與HostGroup名稱相同,在里邊配置一個端口監控,通常進程監控有兩種手段,一個是進程本身是否存活,一個是端口是否在監聽,此處我們使用端口監控。

 


 

 

 

右上角那個加號按鈕是用於增加策略的,一個模板中可以有多個策略,此處我們只添加了一個。下面可以配置報警接收人,此處填寫的是falcon,這是之前在UIC中創建的Team。

4. HostGroup與模板綁定

一個模板是可以綁定到多個HostGroup的,現在我們重新回到HostGroups頁面,找到sa.dev.falcon.judge這個HostGroup,右側有幾個超鏈接,點擊【templates】進入一個新頁面,輸入模板名稱,綁定一下就行了。

 


 

a. 補充

上面步驟做完了,也就配置完了。如果judge組件宕機,端口不再監聽了,就會報警。不過大家不要為了測試報警效果,直接把judge組件給干掉了,因為judge本身就是負責判斷報警的,把它干掉了,那就沒法判斷了……所以說falcon現在並不完善,沒法用來監控本身的組件。為了測試,大家可以修改一下端口監控的策略配置,改成一個沒有在監聽的端口,這樣就觸發報警了。

上面的策略只是對falcon-judge做了端口監控,那如果我們要對falcon這個項目的所有機器加一些負載監控,應該如何做呢?

  1. 創建一個HostGroup:sa.dev.falcon,把所有falcon的機器都塞進去
  2. 創建一個模板:sa.dev.falcon.common,添加一些像ping, df.bytes.free.percent, load.5min等策略
  3. sa.dev.falcon.common綁定到sa.dev.falcon這個HostGroup

附:sa.dev.falcon.common的配置樣例

 

大家可能不知道各個指標分別叫什么,自己push的數據肯定知道自己的metric了,agent push的數據可以參考:https://github.com/open-falcon/agent/tree/master/funcs

5. 如何配置策略表達式

策略表達式,即expression,具體可以參考 HostGroup與Tags設計理念,這里只是舉個例子:

 

上例中的配置傳達出的意思是:endpoint=aggregator 並且 metric=cpu.busy 的所有的監控指標,只要連續3次 >= 0.5 則報警給falcon-test1這個報警組。

expression無需綁定到HostGroup,enjoy it

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM