Ceilometr: 12、Gnocchi2.0 源碼分析__Ceilometer

來源:互聯網
上載者:User

gnocchi是用於多租時間序列彙總處理的資料庫。可用於進行時間序列彙總,統計處理。


1目錄概要介紹

gnocchi下面主要包括etc目錄,gnocchi目錄,setup.cfg檔案,setup.py檔案。

在gnocchi目錄下主要包括:aggregates目錄,indexer目錄,rest目錄,storage目錄,

__init__.py,arrchive_policy.py,carbonara.py,cli.py,opts.py,service.py,statsd.py。


2gnocchi下非目錄檔案介紹

__init__.py:空檔案

arrchive_policy.py:主要定義了low,medium.high預設歸檔策略,歸檔策略(名稱,回退視窗,定義,聚集方法列表),歸檔策略條目(粒度,點的個數,時間跨度)

carbonara.py:包含TimeSerie類(時間序列,本質是映射,可排序,去除重複索引),BoundTimeSerie(繼承TimeSerie類,設定每次處理的metric大小),AggregatedTimeSerie(繼承自TimeSerie,該類重要,包含update函數外部傳入近來的時間序列(映射),和當前已經存在的時間序列做運算,以及_resample函數,通過採樣來分組,並應用聚集方法到點的集合中, 產生再次聚集後的時間序列),TimeSerieArchive

cli.py:重要,包含了資料庫產生的入口方法upgrade(),api入口方法api(),statsd入口方法statsd(),

彙總和統計的入口方法metricd(),重要。

MetricProcessBase(監控項處理基類,先初始化資料庫,然後進入到線程中迴圈,執行任務),MetricReporting(繼承自MetricProcessBase,執行的線程任務是列印待處理的監控項的採樣數量等資訊),MetricProcessor(重要類,繼承自MetricProcessBase,從隊列中擷取測量值列表並處理,包括彙總,更新,重新採樣等重要操作)


service.py:提供了prepare_service函數,用於註冊配置選項組,設定api和metricd的工作者數量


statsd.py:包含Stats類(擷取存放庫和索引庫的磁碟機,並串連索引庫;擷取資源,遍曆資源對應的測量值,調用通過InfluxDBClient寫入監控項的測量值),StatsdServer類(統計服務,主要對接收到資料的每一行解析,得到監控項名稱和採樣值,設定監控項對應的測量值

),start()方法開啟服務,執行個體化stats對象,建立資料報端點,調用asyncio,永久開啟服務


opts.py:包含了indexer,metricd,api,storage等元組組成的配置項列表


genconfig.py:主要根據gnocchi-config-generator.conf來組建組態檔案gnocchi.conf

aggregates目錄:包含__init__.py和moving_stats.py

__init__.py:CustomAggregator(object):作用:定製化聚集器,是抽象類別,包含一個抽象方法:compute。

moving_stats.py:MovingAverage(繼承自CustomAggregator):包含:aggregate_data和compute方法


3 rest目錄

是api轉化為gnocchi可以處理請求的入口類,包含了許多Controller方法。由於gnocchi採用pecan(對象路由web架構來擷取資源),這個檔案提供的方法就是解析傳遞過來的url,通過對應方法解析後執行相關命令。

__init__.py:

比較重要的方法包括:MetricController(繼承自rest.RestController

,提供post_measures添加測量值數組,擷取某個監控項測量值列表方法get_measures),MetricsController(根據監控項id解析得到監控項交給MetricController處理),NamedMetricController(可根據監控項名稱查詢到監控項,根據資源id,類型,監控項列表來更新資源),MetricsMeasuresBatchController

(重要,監控項測量值批處理控制器,實際上就是遍曆每個監控項,將每隔監控項的採樣值列表添加到資料庫中)。其他….

app.py:app.py是pecan應用的入口,包含應用初始化代碼。hooks對應的配置是一些Pecan的hook,作用類似於WSGIMiddleware

GnocchiHook類(提供在Pecan嘗試將一個請求分發給控制器的之前被調用)

的函數on_route)。load_app方法(Paste.Deploy主要是用來載入WSGI中的WebApp使用,其核心函數是loadapp()通過loadapp函數和一個設定檔或者egg包來載入WSGI應用

一個設定檔尾碼為ini,內容被分為很多段):實際上是擷取storage,indexer資料庫磁碟機,然後部署產生app並返回。 WerkzeugApp類(傳入設定檔,分裂gnocchi-api進程,並且避免主進程建立到storage/indexer的串連 。  Werkzeug是一個WSGI工具包,他可以作為一個Web架構的底層庫。) build_server(): 執行: service.prepare_service(),執行: serving.run_simpleapp.wsgi檔案:主要調用conf = service.prepare_service(),application = app.load_app(conf)


4 indexer目錄

__init__.py:提供get_driver(conf)方法來根據設定檔中indexer.url擷取索引資料庫的磁碟機,返回存入了配置的資料庫磁碟機對象。

IndexerDriver類(實際上資源,歸檔策略,歸檔策略規則等都儲存在indexer中作用:是抽象類別,封裝了串連,中斷連線,升級等函數,擷取資源,擷取資源清單)sqlalchemy_base.py:該檔案主要定義了索引庫indexer中各個表。例如:ArchivePolicy,Metric等。sqlalchemy.py: 提供get_resource_mappers方法(可能重要,不知道資源如何產生),PerInstanceFacade類(包含獨立寫,獨立讀,寫串連,讀串連等,擷取資料庫引擎等),SQLAlchemyIndexer(indexer.IndexerDriver):通過stevedoe載入資源外掛程式,例如volume,instance等;可以資料庫遷移,升級;產生資源類型到類的映射,重要(可能後續添加新的資源在這裡添加);包含建立資源,列出/刪除歸檔策略等介面sqlalchemy_extension.py: 重要,該檔案包括一些資源表,例如Image,Instance,Volume等,可能後續添加新的資源在這個檔案。


5 storage目錄

包含__init__.py,_carbonara.py,ceph.py,file.py,influxdb.py,swift,py等檔案

最終儲存的彙總結果在storage資料庫中。因此重要。

__init__.py:提供get_driver(conf)方法根據設定檔中的儲存資料庫的磁碟機,返回該磁碟機的類;StorageDriver類儲存驅動資料庫,包括:初始化,停止,處理回退任務,物理刪除,處理/擷取測量值等功能(不過大多都未實現)

_carbonara.py:CarbonaraBasedStorage(重要類,繼承自StorageDriver

,包含添加測量值列表,處理測量值,擷取測量值,刪除監控項等操作

裡面有一個重要方法process_measures:遍曆每隔監控項,擷取每個監控

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.