成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Sentry 監(jiān)控 - Snuba 數(shù)據(jù)中臺(tái)架構(gòu)(編寫和測(cè)試 Snuba 查詢)

安全 應(yīng)用安全 中臺(tái)
為了構(gòu)建 Snuba 查詢,第一步是能夠知道您應(yīng)該查詢哪個(gè)數(shù)據(jù)集,您應(yīng)該選擇哪些實(shí)體以及每個(gè)實(shí)體的 schema 是什么。

[[436990]]

本文轉(zhuǎn)載自微信公眾號(hào)「黑客下午茶」,作者為少 。轉(zhuǎn)載本文請(qǐng)聯(lián)系黑客下午茶公眾號(hào)。

探索 Snuba 數(shù)據(jù)模型

為了構(gòu)建 Snuba 查詢,第一步是能夠知道您應(yīng)該查詢哪個(gè)數(shù)據(jù)集,您應(yīng)該選擇哪些實(shí)體以及每個(gè)實(shí)體的 schema 是什么。

有關(guān)數(shù)據(jù)集和實(shí)體的介紹,請(qǐng)參閱 Snuba 數(shù)據(jù)模型部分。

  • https://getsentry.github.io/snuba/architecture/datamodel.html

數(shù)據(jù)集可以在這個(gè)模塊中找到。每個(gè)數(shù)據(jù)集都是一個(gè)引用實(shí)體的類。

  • https://github.com/getsentry/snuba/blob/master/snuba/datasets/factory.py

系統(tǒng)中的實(shí)體列表可以通過(guò) snuba entity 命令找到:

  1. snuba entities list 

會(huì)返回如下內(nèi)容:

  1. Declared Entities: 
  2. discover 
  3. errors 
  4. events 
  5. groups 
  6. groupassignee 
  7. groupedmessage 
  8. ..... 

一旦我們找到了我們感興趣的實(shí)體,我們就需要了解在該實(shí)體上聲明的 schema 和 relationship。相同的命令描述了一個(gè)實(shí)體:

  1. snuba entities describe groupedmessage 

會(huì)返回:

  1. Entity groupedmessage 
  2.     Entity schema 
  3.     -------------------------------- 
  4.     offset UInt64 
  5.     record_deleted UInt8 
  6.     project_id UInt64 
  7.     id UInt64 
  8.     status Nullable(UInt8) 
  9.     last_seen Nullable(DateTime) 
  10.     first_seen Nullable(DateTime) 
  11.     active_at Nullable(DateTime) 
  12.     first_release_id Nullable(UInt64) 
  13.  
  14.     Relationships 
  15.     -------------------------------- 
  16.         groups 
  17.         -------------------------------- 
  18.         Destination: events 
  19.         Type: LEFT 
  20.             Join keys 
  21.             -------------------------------- 
  22.             project_id = LEFT.project_id 
  23.             id = LEFT.group_id 

它提供列的列表及其類型以及與數(shù)據(jù)模型中定義的其他實(shí)體的關(guān)系。

準(zhǔn)備對(duì) Snuba 的查詢

Snuba 查詢語(yǔ)言稱為 SnQL。它記錄在 SnQL 查詢語(yǔ)言部分。所以本節(jié)不贅述。

  • https://getsentry.github.io/snuba/language/snql.html

有一個(gè) python sdk 可用于構(gòu)建 Snuba 查詢,它可以用于任何 Python 客戶端,包括 Sentry。snuba-sdk。

  • https://github.com/getsentry/snuba-sdk

查詢表示為一個(gè) Query 對(duì)象,如:

  1. query = Query( 
  2.     dataset="discover"
  3.     match=Entity("events"), 
  4.     select=[ 
  5.         Column("title"), 
  6.         Function("uniq", [Column("event_id")], "uniq_events"), 
  7.     ], 
  8.     groupby=[Column("title")], 
  9.     where=[ 
  10.         Condition(Column("timestamp"), Op.GT, datetime.datetime(2021, 1, 1)), 
  11.         Condition(Column("project_id"), Op.INFunction("tuple", [1, 2, 3])), 
  12.     ], 
  13.     limit=Limit(10), 
  14.     offset=Offset(0), 
  15.     granularity=Granularity(3600), 

有關(guān)如何構(gòu)建查詢的更多詳細(xì)信息,請(qǐng)參見 sdk 文檔。

  • https://getsentry.github.io/snuba-sdk/

一旦查詢對(duì)象準(zhǔn)備就緒,它就可以發(fā)送到 Snuba。

使用 Sentry 向 Snuba 發(fā)送查詢

查詢 Snuba 時(shí)最常見的用例是通過(guò) Sentry。本節(jié)說(shuō)明如何在 Sentry 代碼庫(kù)中構(gòu)建查詢并將其發(fā)送到 Snuba。

Sentry 導(dǎo)入了上述的 Snuba sdk。這是構(gòu)建 Snuba 查詢的推薦方法。

一旦創(chuàng)建了 Query 對(duì)象,Sentry 提供的 Snuba client api 就可以并且應(yīng)該用于將查詢發(fā)送到 Snuba。

api 在這個(gè)模塊中。它負(fù)責(zé)緩存、重試并允許批量查詢。

  • https://github.com/getsentry/sentry/blob/master/src/sentry/utils/snuba.py#L667

該方法返回一個(gè)字典,其中包含響應(yīng)中的數(shù)據(jù)和其他元數(shù)據(jù):

  1.     "data": [ 
  2.         { 
  3.             "title""very bad"
  4.             "uniq_events": 2 
  5.         } 
  6.     ], 
  7.     "meta": [ 
  8.         { 
  9.             "name""title"
  10.             "type""String" 
  11.         }, 
  12.         { 
  13.             "name""uniq_events"
  14.             "type""UInt64" 
  15.         } 
  16.     ], 
  17.     "timing": { 
  18.         ... details ... 
  19.     } 

data 部分是一個(gè)列表,每行一個(gè)字典。meta 包含響應(yīng)中包含的列的列表,其數(shù)據(jù)類型由 Clickhouse 推斷。

通過(guò) Web UI 發(fā)送測(cè)試查詢

Snuba 具有可用于發(fā)送查詢的最小 Web UI。您可以在本地運(yùn)行 Snuba, 并且可以通過(guò) http://localhost:1218/[DATASET NAME]/snql 訪問(wèn) Web UI。

應(yīng)該在 query 屬性中提供 SnQL 查詢,并且響應(yīng)的結(jié)構(gòu)與上一節(jié)中討論的相同。

通過(guò) curl 發(fā)送查詢

Web UI 僅將 payload 作為 POST 發(fā)送。因此,使用 curl 或任何其他 HTTP 客戶端可以實(shí)現(xiàn)相同的結(jié)果。

請(qǐng)求和響應(yīng)格式

請(qǐng)求格式在上面截圖中可見:

  • query 包含字符串形式的 SnQL 查詢。
  • dataset 是數(shù)據(jù)集名稱(如果尚未在 url 中指定。
  • debug 使 Snuba 在響應(yīng)中提供詳盡的統(tǒng)計(jì)信息,包括 Clickhouse 查詢。
  • consistent 強(qiáng)制 Clickhouse 查詢以單線程模式執(zhí)行,并且如果 Clickhouse 表被復(fù)制,它將強(qiáng)制 Snuba 始終命中同一個(gè)節(jié)點(diǎn)。可以保證順序一致性,因?yàn)檫@是消費(fèi)者默認(rèn)寫入的節(jié)點(diǎn)。這是通過(guò)設(shè)置為 in_order 的負(fù)載平衡 Clickhouse 屬性實(shí)現(xiàn)的。
    • https://clickhouse.tech/docs/en/operations/settings/settings/#load_balancing-in_order
  • turbo 為 TURBO_SAMPLE_RATE Snuba 設(shè)置中定義的查詢?cè)O(shè)置采樣率。它還可以防止 Snuba 將 FINAL 模式應(yīng)用于 Clickhouse 查詢,以防在替換后需要保證正確的結(jié)果。

Snuba 可以使用 4 個(gè) http code 進(jìn)行響應(yīng)。200 表示成功的查詢,如果查詢無(wú)法正確驗(yàn)證,則為 400。500 通常意味著與 Clickhouse 相關(guān)的問(wèn)題(從超時(shí)到連接問(wèn)題),盡管 Snuba 仍然無(wú)法提前識(shí)別一些無(wú)效查詢。Snuba 有一個(gè)內(nèi)部速率限制器,所以 429 也是一個(gè)可能的返回碼。

成功查詢的響應(yīng)格式與上面討論的相同。完整版本如下所示(在 debug 模式下)

  1.     "data": [], 
  2.     "meta": [ 
  3.         { 
  4.             "name""title"
  5.             "type""String" 
  6.         } 
  7.     ], 
  8.     "timing": { 
  9.         "timestamp": 1621038379, 
  10.         "duration_ms": 95, 
  11.         "marks_ms": { 
  12.             "cache_get": 1, 
  13.             "cache_set": 4, 
  14.             "execute": 39, 
  15.             "get_configs": 0, 
  16.             "prepare_query": 10, 
  17.             "rate_limit": 4, 
  18.             "validate_schema": 34 
  19.         } 
  20.     }, 
  21.     "stats": { 
  22.         "clickhouse_table""errors_local"
  23.         "final"false
  24.         "referrer""http://localhost:1218/events/snql"
  25.         "sample"null
  26.         "project_rate": 0, 
  27.         "project_concurrent": 1, 
  28.         "global_rate": 0, 
  29.         "global_concurrent": 1, 
  30.         "consistent"false
  31.         "result_rows": 0, 
  32.         "result_cols": 1, 
  33.         "query_id""f09f3f9e1c632f395792c6a4bfe7c4fe" 
  34.     }, 
  35.     "sql""SELECT (title AS _snuba_title) FROM errors_local PREWHERE equals((project_id AS _snuba_project_id), 1) WHERE equals(deleted, 0) AND greaterOrEquals((timestamp AS _snuba_timestamp), toDateTime('2021-05-01T00:00:00', 'Universal')) AND less(_snuba_timestamp, toDateTime('2021-05-11T00:00:00', 'Universal')) LIMIT 1000 OFFSET 0" 

timing 部分包含查詢的時(shí)間戳和持續(xù)時(shí)間。有趣的是,持續(xù)時(shí)間被分解為幾個(gè)階段:marks_ms。

sql 元素是 Clickhouse 查詢。

stats 字典包含以下 key

  • clickhouse_table 是 snuba 在查詢處理過(guò)程中選取的表。
  • final 表示 Snuba 是否決定向 Clickhouse 發(fā)送 FINAL 查詢,這會(huì)迫使 Clickhouse 立即應(yīng)用相關(guān)的合并(Merge Tree)。細(xì)節(jié)
  • https://clickhouse.tech/docs/en/sql-reference/statements/select/from/#select-from-final
  • sample 是應(yīng)用的采樣率。
  • project_rate 是查詢時(shí) Snuba 每秒收到的特定項(xiàng)目的請(qǐng)求數(shù)。
  • project_concurrent 是查詢時(shí)涉及特定項(xiàng)目的并發(fā)查詢數(shù)。
  • global_rate 與 project_rate 相同,但不專注于一個(gè)項(xiàng)目。
  • global_concurrent 與 project_concurrent 相同,但不專注于一個(gè)項(xiàng)目。
  • query_id 是此查詢的唯一標(biāo)識(shí)符。

查詢驗(yàn)證問(wèn)題通常采用以下格式:

  1.     "error": { 
  2.         "type""invalid_query"
  3.         "message""missing >= condition on column timestamp for entity events" 
  4.     } 

 

Clickhouse 錯(cuò)誤將具有類似的結(jié)構(gòu)。type 字段將顯示 clickhouse,該消息將包含有關(guān)異常的詳細(xì)信息。與查詢驗(yàn)證錯(cuò)誤相反,在 Clickhouse 錯(cuò)誤的情況下,實(shí)際執(zhí)行了查詢,因此存在為成功查詢描述的所有時(shí)間和統(tǒng)計(jì)信息。

 

責(zé)任編輯:武曉燕 來(lái)源: 黑客下午茶
相關(guān)推薦

2021-11-27 23:54:44

監(jiān)控Snuba數(shù)據(jù)

2021-10-09 23:33:55

監(jiān)控

2021-10-11 19:36:08

監(jiān)控Sentry架構(gòu)

2021-10-09 00:00:40

Sentr 監(jiān)控架構(gòu)

2021-12-01 23:59:45

監(jiān)控Snuba數(shù)據(jù)中臺(tái)

2023-02-13 11:43:15

云原生中間件負(fù)載均衡

2021-09-16 23:33:41

大數(shù)據(jù)Sentry監(jiān)控

2023-04-21 13:15:01

2022-03-15 21:38:29

sentry微服務(wù)監(jiān)控

2021-09-14 23:50:17

Sentry后端監(jiān)控

2021-09-27 19:41:31

監(jiān)控Sentry Alerts

2021-09-26 16:20:04

Sentry Dashboards 數(shù)據(jù)可視化

2019-12-12 10:22:16

大數(shù)據(jù)平臺(tái)大數(shù)據(jù)安全大數(shù)據(jù)

2021-09-11 21:02:24

監(jiān)控Sentry Web性能

2021-09-13 05:00:09

監(jiān)控Trends 性能

2021-04-22 08:45:38

架構(gòu)交易中臺(tái)

2021-09-09 12:28:50

Sentry Web性能監(jiān)控

2021-09-29 07:47:49

Sentry 監(jiān)控Environment事件數(shù)據(jù)

2010-07-23 15:30:18

2021-12-31 18:35:40

監(jiān)控Sentry開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日日艹夜夜艹 | 麻豆久久久 | 精品产国自在拍 | 很很干很很日 | av在线一区二区 | 91久久精品一区二区三区 | 狠狠操狠狠搞 | 免费成人在线网站 | 一区二区三区国产 | 国产精品99精品久久免费 | 欧美精品一区二区三区四区五区 | 国产精品射 | 人人爽日日躁夜夜躁尤物 | 欧美久久视频 | av久久| 欧美99久久精品乱码影视 | 99精品国产一区二区三区 | 久久久久久久久久久久久久国产 | 成人免费在线观看 | 1级毛片| 欧美a区| 欧美成视频 | 亚洲一区二区精品 | 日韩一区二区三区在线观看 | 91精品久久久久久久久99蜜臂 | 韩国av一区二区 | 99这里只有精品 | 一级大片 | 911精品国产 | 欧美色a v | 久久久国产一区二区三区 | h片在线观看网站 | 久久高清 | 国产福利91精品一区二区三区 | 福利社午夜影院 | 欧美视频1区 | 自拍偷拍亚洲欧美 | 国产1区| 欧美一区二区激情三区 | 欧美精品一区在线 | 精产嫩模国品一二三区 |