小米釋出的運維監控工具:open falcon
# Introduction
監控系統是整個運維環節,乃至整個產品生命週期中最重要的一環,事前及時預警發現故障,事後提供翔實的資料用於追查定位問題。監控系統作為一個成熟的運維產品,業界有很多開源的實現可供選擇。當公司剛剛起步,業務規模較小,運維團隊也剛剛建立的初期,選擇一款開源的監控系統,是一個省時省力,效率最高的方案。之後,隨著業務規模的持續快速增長,監控的物件也越來越多,越來越複雜,監控系統的使用物件也從最初少數的幾個SRE,擴大為更多的DEVS,SRE。這時候,監控系統的容量和使用者的“使用效率”成了最為突出的問題。
監控系統業界有很多傑出的開源監控系統。我們在早期,一直在用zabbix,不過隨著業務的快速發展,以及網際網路公司特有的一些需求,現有的開源的監控系統在效能、擴充套件性、和使用者的使用效率方面,已經無法支撐了。
因此,我們在過去的一年裡,從網際網路公司的一些需求出發,從各位SRE、SA、DEVS的使用經驗和反饋出發,結合業界的一些大的網際網路公司做監控,用監控的一些思考出發,設計開發了小米的監控系統:open-falcon。
open-falcon的目標是做最開放、最好用的網際網路企業級監控產品。
# Highlights and features
- 強大靈活的資料採集 :自動發現,支援falcon-agent、snmp、支援使用者主動push、使用者自定義外掛支援、opentsdb data model like(timestamp、endpoint、metric、key-value tags)
- 水平擴充套件能力
- 高效率的告警策略管理 :高效的portal、支援策略模板、模板繼承和覆蓋、多種告警方式、支援callback呼叫
- 人性化的告警設定 :最大告警次數、告警級別、告警恢復通知、告警暫停、不同時段不同閾值、支援維護週期
- 高效率的graph元件 :單機支撐200萬metric的上報、歸檔、儲存(週期為1分鐘)
- 高效的歷史資料query元件 :採用rrdtool的資料歸檔策略,秒級返回上百個metric一年的歷史資料
- dashboard :多維度的資料展示,使用者自定義Screen
- 高可用 :整個系統無核心單點,易運維,易部署,可水平擴充套件
- 開發語言 : 整個系統的後端,全部golang編寫,portal和dashboard使用python編寫。
# Architecture
備註:虛線所在的aggregator元件還在設計開發階段。
每臺伺服器,都有安裝falcon-agent,falcon-agent是一個golang開發的daemon程式,用於自發現的採集單機的各種資料和指標,這些指標包括不限於以下幾個方面,共計400多項指標。
– 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)
# Data model
Data Model是否強大,是否靈活,對於監控系統使用者的“使用效率”至關重要。比如以zabbix為例,上報的資料為hostname(或者ip)、metric,那麼使用者新增告警策略、管理告警策略的時候,就只能以這兩個維度進行。舉一個最常見的場景:
hostA的磁碟空間,小於5%,就告警。一般的伺服器上,都會有兩個主要的分割槽,根分割槽和home分割槽,在zabbix裡面,就得加兩條規則;如果是hadoop的機器,一般還會有十幾塊的資料盤,還得再加10多條規則,這樣就會痛苦,不幸福,不利於自動化。
open-falcon,採用和opentsdb相同的資料格式:metric加多組key value tags,舉兩個例子:
{
metric: load.1min,
endpoint: open-falcon-host,
tags: srv=falcon,idc=aws-sgp,group=az1,
value: 1.5,
timestamp: `date +%s`,
counterType: GAUGE,
step: 60
}
{
metric: net.port.listen,
endpoint: open-falcon-host,
tags: port=3306,
value: 1,
timestamp: `date +%s`,
counterType: GAUGE,
step: 60
}
通過這樣的資料結構,我們就可以從多個維度來配置告警,配置dashboard等等。
備註:endpoint是一個特殊的tag。
# Data collection
transfer,接收客戶端傳送的資料,做一些資料規整,檢查之後,轉發到多個後端系統去處理。在轉發到每個後端業務系統的時候,transfer會根據一致性hash演算法,進行資料分片,來達到後端業務系統的水平擴充套件。
transfer 提供jsonRpc介面和telnet介面兩種方式,transfer自身是無狀態的,掛掉一臺或者多臺不會有任何影響,同時transfer效能很高,每分鐘可以轉發超過500萬條資料。
transfer目前支援的業務後端,有三種,judge、graph、opentsdb。judge是我們開發的高效能告警判定元件,graph是我們開發的高效能資料儲存、歸檔、查詢元件,opentsdb是開源的時間序列資料儲存服務。可以通過transfer的配置檔案來開啟。
transfer的資料來源,一般有三種:
1. falcon-agent採集的基礎監控資料
2. falcon-agent執行使用者自定義的外掛返回的資料
3. client library:線上的業務系統,都嵌入使用了統一的perfcounter.jar,對於業務系統中每個RPC介面的qps、latency都會主動採集並上報
說明:上面這三種資料,都會先發送給本機的proxy-gateway,再由gateway轉發給transfer。
# Alerting
報警判定,是由judge元件來完成。使用者在web portal來配置相關的報警策略,儲存在MySQL中。heartbeat server 會定期載入MySQL中的內容。judge也會定期和heartbeat server保持溝通,來獲取相關的報警策略。
heartbeat sever不僅僅是單純的載入MySQL中的內容,根據模板繼承、模板項覆蓋、報警動作覆蓋、模板和hostGroup繫結,計算出最終關聯到每個endpoint的告警策略,提供給judge元件來使用。
transfer轉發到judge的每條資料,都會觸發相關策略的判定,來決定是否滿足報警條件,如果滿足條件,則會發送給alarm,alarm再以郵件、簡訊、米聊等形式通知相關使用者,也可以執行使用者預先配置好的callback地址。
使用者可以很靈活的來配置告警判定策略,比如連續n次都滿足條件、連續n次的最大值滿足條件、不同的時間段不同的閾值、如果處於維護週期內則忽略 等等。
# Query
到這裡,資料已經成功的儲存在了graph裡。如何快速的讀出來呢,讀過去1小時的,過去1天的,過去一月的,過去一年的,都需要在1秒之內返回。
這些都是靠graph和query元件來實現的,transfer會將資料往graph元件轉發一份,graph收到資料以後,會以rrdtool的資料歸檔方式來儲存,同時提供查詢RPC介面。
query面向終端使用者,收到查詢請求後,會去多個graph裡面,查詢不同metric的資料,彙總後統一返回給使用者。
# Dashboard
dashboard首頁,使用者可以以多個維度來搜尋endpoint列表,即可以根據上報的tags來搜尋關聯的endpoint。
使用者可以自定義多個metric,新增到某個screen中,這樣每天早上只需要開啟screen看一眼,服務的執行情況便盡在掌握了。
當然,也可以檢視清晰大圖,橫座標上zoom in/out,快速篩選反選。總之使用者的“使用效率”是第一要務。
# Web portal
一個高效的portal,對於提升使用者的“使用效率”,加成很大,平時大家都這麼忙,能給各位SRE、Devs減輕一些負擔,那是再好不過了。
這是host group的管理頁面,可以和服務樹結合,機器進出服務樹節點,相關的模板會自動關聯或者解除。這樣服務上下線,都不需要手動來變更監控,大大提高效率,降低遺漏和誤報警。
一個最簡單的模板的例子,模板支援繼承和策略覆蓋,模板和host group繫結後,host group下的機器會自動應用該模板的所有策略。
當然,也可以寫一個簡單的表示式,就能達到監控的目的,這對於那些endpoint不是機器名的場景非常方便。
新增一個表示式也是很簡單的。
# Storage
對於監控系統來講,歷史資料的儲存和高效率查詢,永遠是個很難的問題!
1. 資料量大:目前我們的監控系統,每個週期,大概有2000萬次資料上報(上報週期為1分鐘和5分鐘兩種,各佔50%),一天24小時裡,從來不會有業務低峰,不管是白天和黑夜,每個週期,總會有那麼多的資料要更新。
2. 寫操作多:一般的業務系統,通常都是讀多寫少,可以方便的使用各種快取技術,再者各類資料庫,對於查詢操作的處理效率遠遠高於寫操作。而監控系統恰恰相反,寫操作遠遠高於讀。每個週期幾千萬次的更新操作,對於常用資料庫(MySQL、postgresql、mongodb)都是無法完成的。
3. 高效率的查:我們說監控系統讀操作少,是說相對寫入來講。監控系統本身對於讀的要求很高,使用者經常會有查詢上百個meitric,在過去一天、一週、一月、一年的資料。如何在1秒內返回給使用者並繪圖,這是一個不小的挑戰。
open-falcon在這塊,投入了較大的精力。我們把資料按照用途分成兩類,一類是用來繪圖的,一類是使用者做資料探勘的。
對於繪圖的資料來講,查詢要快是關鍵,同時不能丟失資訊量。對於使用者要查詢100個metric,在過去一年裡的資料時,資料量本身就在那裡了,很難1秒之類能返回,另外就算返回了,前端也無法渲染這麼多的資料,還得采樣,造成很多無謂的消耗和浪費。我們參考rrdtool的理念,在資料每次存入的時候,會自動進行取樣、歸檔。我們的歸檔策略如下,歷史資料儲存5年。同時為了不丟失資訊量,資料歸檔的時候,會按照平均值取樣、最大值取樣、最小值取樣存三份。
“`
// 1分鐘一個點存 12小時
c.RRA(“AVERAGE”, 0.5, 1, 720)
// 5m一個點存2d
c.RRA(“AVERAGE”, 0.5, 5, 576)
c.RRA(“MAX”, 0.5, 5, 576)
c.RRA(“MIN”, 0.5, 5, 576)
// 20m一個點存7d
c.RRA(“AVERAGE”, 0.5, 20, 504)
c.RRA(“MAX”, 0.5, 20, 504)
c.RRA(“MIN”, 0.5, 20, 504)
// 3小時一個點存3個月
c.RRA(“AVERAGE”, 0.5, 180, 766)
c.RRA(“MAX”, 0.5, 180, 766)
c.RRA(“MIN”, 0.5, 180, 766)
// 1天一個點存5year
c.RRA(“AVERAGE”, 0.5, 720, 730)
c.RRA(“MAX”, 0.5, 720, 730)
c.RRA(“MIN”, 0.5, 720, 730)
“`
對於原始資料,transfer會打一份到hbase,也可以直接使用opentsdb,transfer支援往opentsdb寫入資料。
# Committers
- laiwei: https://github.com/laiwei 來煒沒睡醒@微博 / [email protected]微信
- 秦曉輝: https://github.com/ulricqin [email protected]微博 [email protected]微信
# Contributors
- 近期我們會把絕大數的元件整理到 http://github.com/open-falcon , 期待大家一起貢獻,推動,做最開放、最好用的企業級監控系統。
# TODO
- metric的聚合
- 環比、同比報警判定
- 流量的突升突降判定
# License
Copyright 2014-2015 Xiaomi, Inc.
Licensed under the Apache License,
Version 2.0:
http://www.apache.org/licenses/LICENSE-2.0
相關推薦
小米釋出的運維監控工具:open falcon
# Introduction 監控系統是整個運維環節,乃至整個產品生命週期中最重要的一環,事前及時預警發現故障,事後提供翔實的資料用於追查定位問題。監控系統作為一個成熟的運維產品,業界有很多開源的實現可供選擇。當公司剛剛起步,業務規模較小,運維團隊也剛剛建立的初期,選擇一款
開源運維監控工具open falcon
小米釋出的運維監控工具:open falcon 專案地址:http://open-falcon.org/ Introduction 監控系統是整個運維環節,乃至整個產品生命週期中最重要的一環,事前及時預警發現故障,事後提供翔實的資料用於追查定位問題。監控系統作為一個成熟
寫了一款自動運維監控工具
signal 發送 監控 自動 cor 異常 硬盤 分發 tst AisinGioro 是一款自動運維監控工具,用於監控主機性能參數(心跳、CPU、內存、硬盤、網站連接數)、網絡連通性(Ping、Port、Http)、監控異常通知,基於B/S架構,主要技術 .Net/C#,
使用Redis運維監控工具sentinel進行自動故障轉移
在一個叢集中,我們經常要考慮它的安全,防止主節點發生宕機,當然,這是無法保障的,不可避免,但是,我們可以做好預防措施,比如在一個叢集中,主節點掛掉了,我們要進行迅速轉移,將另一臺從節點切換為主節點從而預防單點故障,那麼,本篇文章將教如何手動進行故障轉移,最後使用
絕不能錯過的10款最新OpenStack網路運維&監控工具
摘要 今天我們要推薦給大家的是關於奧斯汀OpenStack Summit的OpenStack網路方面功能與工具相關的技術演講。 希望可以幫助國內的開發者、架構師和使用者更好地瞭解OpenStack在SDN網路領域的最新發展。 功能與工具篇的視訊目錄: Tap-As-A-Service What
開源還是商用?十大雲運維監控工具橫評
隨著雲端計算和網際網路的高速發展,大量應用需要橫跨不同網路終端,並廣泛接入第三方服務(如支付、登入、導航等),IT系統架構越來越複雜。快速迭代的產品需求和良好的使用者體驗,需要IT運維管理者時刻保障核心業務穩定可用,而企業運維中的痛點和難點也急需解決。 1、面向業務的運
Open-falcon運維監控系統——微信接口二次開發
con 重寫方法 接口 ack sets image parse urlopen data 1、Open-falcon運維監控系統簡介 OpenFalcon是一款由小米運維團隊從互聯網公司的需求出發, 根據多年的運維經驗,結合市面上使用的一些運維監控系統的使用經驗和反饋,
運維監控-Open-Falcon實戰部署
運維監控-Open-Falcon實戰部署 作者:尹正傑 版權宣告:原創作品,謝絕轉載!否則將追究法律責任。 一. 二
運維監控系統之Open-Falcon
一、Open-Falcon介紹 1、監控系統,可以從運營級別(基本配置即可),以及應用級別(二次開發,通過埠進行日誌上報),對伺服器、作業系統、中介軟體、應用進行全面的監控,及報警,對我們的系統正常執行的作用非常重要。 2、基礎監控 CPU、Load、記憶體、磁
小米開源監控系統Open-falcon部署筆記(下)
一.部署前端 1.建立工作目錄 #建立工作目錄 export HOME=/home/frontwork export HOME=/home/frontwork export WORKSPACE=$HOME/open-falcon mkdir -p $WORKSPACE
小米監控系統open-falcon搭建
一、基礎環境搭建1基本環境作業系統:CentOS6.5 Python版本: Python2.7.10 Redis版本:2.8.19 Mysql版本:5.5.572系統設定 vim /etc/selinux/config#SELINUX=enforcing #註釋掉
運維監控大數據的提取與分析
monitor 運維監控 本文內容整理來自【敏捷運維大講堂】蔣君偉老師的線上直播分享。分別從以下3個維度來分享:1、雲時代監控分析的窘境;2、使用標簽標記監控數據的維度;3、監控數據應用場景。雲時代監控分析的窘境在虛擬化與容器技術廣泛應用的情況下,運維對象大規模地增長,監控平臺每天存儲的指標都以億計,
運維自動化工具ansible(模塊使用)
copy fff lin 自動 執行命令 官網 修改 相同 mount 命令格式: ansible hosts -m shell -a ‘uptime‘ 解析: ansible #主命令 hosts #在/etc/ansible/hosts文件中定義的主
運維自動化工具ansible(安裝)
down 免密鑰 org roo bin package python2 div 5.1 一、安裝 註意:強烈建議升級python版本到2.6以上,不然運行會出錯或者有些功能會沒有,在編譯安裝其他包的時候也會因為兼容問題報錯。 (1)、python2.7安裝 http
運維自動化工具ELVES
elvesGitHub:https://github.com/elves-projectGitBooks:https://gy-games.gitbooks.io/elves/部署: https://www.travis-ci.org/elves-project運維自動化工具ELVES
Linux下的自動化運維ansible工具
使用 輕量級 工具輕松 什麽是自動化運維 隨著信息時代的持續發展,IT運維已經成為IT服務內涵中重要的組成部分。面對越來越復雜的業務, 面對越來越多樣化的用戶需求,不斷擴展的IT應用需要越來越合理的模式來保障IT服務能靈活便捷、安 全穩定地持續保障,這種模式中的保障因素就是IT運維(其他因素
19道小米網運維工程師筆試真題
小米 運維題目1:有一百個圖片文件,它們的地址都是http://down.xiaomi.com/img/1.pnghttp://down.xiaomi.com/img/2.png…一直到http://down.xiaomi.com/img/100.png批量下載這100個圖片文件,並找出其中大於500KB的文
SUSE Linux 11編譯安裝Ansible自動化運維管理工具
ansible 運維 ANSIBLE Ansible是一個使用Python語言開發的Linux平臺下的自動化運維管理工具,它支持遠程管理絕大多數Linux或Windows主機。Ansible默認通過SSH協議管理機器,即只需要在管理主機上安裝Ansible就可以遠程管理Linux主機,被托管節點主機不
Linux運維之Ansible自動化運維管理工具
不同 log 腳本 默認端口 遠程管理 modules 用戶 兩個 簡單的 原文鏈接:http://blog.csdn.net/xyang81/article/details/51568227 Ansible簡介:Ansible是一個簡單高效的自動化運維管理工具,用Pyth
zabbix運維監控 (1)
zabbix 監控一、監控概述1 分類:硬件監控 ----系統監控 ---- 應用監控 ---- 業務監控 ---- 安全監控 ---- 網絡監控 ----WEB監控 ---- 自動化監控 -----分布式監控 2 內容:磁盤容易壞、CPU(負載、用戶態及內核態、使用率) 、內存(使用率、尋址、大頁面內存)