1. 程式人生 > >小米釋出的運維監控工具:open falcon

小米釋出的運維監控工具: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

# 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(負載、用戶態及內核態、使用率) 、內存(使用率、尋址、大頁面內存)