国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

日志架構演進:從集中式到分布式的Kubernetes日志策略

云計算 云原生
理想情況下,我們需要將可觀測性的三個重要組件都關聯起來才能更好的排查定位問題。比如當收到監控系統通過指標變化發出的報警時,可以通過鏈路追蹤定位具體是哪個系統觸發的問題。

當我們沒有使用云原生方案部署應用時采用的日志方案往往是 ELK 技術棧。

這套技術方案比較成熟,穩定性也很高,所以幾乎成為了當時的標配。

可是隨著我們使用 kubernetes 步入云原生的時代后, kubernetes 把以往的操作系統上的許多底層都屏蔽,再由他提供了一些標準接口。

同時在 kubernetes 中的日志來源也比傳統虛擬機多,比如可能有容器、kubernetes 自身的事件、日志等。

我們的日志采集方案也得與時俱進,kubernetes 的官方博客有介紹提供一下幾種方案:

節點采集

第一種方案是在節點中采集日志,我們知道 kubernetes 是分為 master 調度節點以及 worker 工作節點;我們的應用都是運行在 worker 節點中的。

在 kubernetes 環境中更推薦使用標準的 stdout/stderr 作為日志輸出,這樣 kubernetes 更方便做統一處理。

以我們的 docker 運行時為例,默認情況下我們的標準輸入文件會寫入到 /var/log 目錄中。

如上圖所示:我們可以在 kubernetes 的每一個 worker 節點中部署一個 DaemonSet 類型的采集器(filebeat 等),再由他去采集該節點下 /var/log 的日志,最終由他將日志采集后發往日志處理的后端,比如 elasticsearch 等組件中。

這種方案的好處是資源占用較低,往往是有多少個 worker 節點就可以部署多少個采集器。

而且和業務的耦合度低,業務和采集器不管誰進行重啟或升級互相都不會產生影響。

但缺點也比較明顯,整個節點的日志采集瓶頸都在這個采集器這里了,如果某些 worker 節點的 Pod 數量不均衡,或者是本身日志產生也不平均時就會出現明顯的負債不平衡。

而且也無法針對某些日志高峰場景進行調優(畢竟所有的 Pod 都是使用的一個日志采集器)。

所以節點級的日志采集更適用與該 worker 節點負債較低的時候使用,也更容易維護。

Sidecar 代理模式

第二種相對于第一種可以理解為由集中式的日志采集分散到各個應用 Pod 中自行采集。

需要為每一個業務 Pod 掛載一個邊車(sidecar)進行日志采集,由于邊車和業務 Pod 共享的是一個存儲,所以可以很方便的讀取到日志。

由于它是和應用掛載在一起的,所以資源占用自然會比節點采集更多,同理耦合度也增加了,采集組件的升級可能還會影響的業務 Pod。

但同樣的帶來好處就是可以針對單個 Pod 更精細的控制采集方案。

比如對于一些日志寫入頻繁的應用,可以將 filebeat 的配置提高,甚至還可以將這種高負載的日志單獨寫入一個 elasticsearch 中,這樣可以與普通負載的日志進行資源隔離。

這個方案更適用與集群規模較大的場景,需要做一些精細化配置。

我們其實也是采用的也是這個方案,不過具體細節稍有不同。

我們沒有直接使用標準輸入和輸出,原因如下:

日志格式沒法統一,導致最終查詢的時候無法做一些標準化的限制(比如我們要求每個日志都需要帶業務 id、traceId 等,查詢時候有這些業務指標就很容易沉淀一些標準的查詢語句。)

最終我們還是采用了 Java 的老朋友,logback 配置了自己的日志格式,所有的應用都會根據這個模版進行日志輸出。

同時利用日志框架的批量寫入、緩沖等特性還更容易進行日志的性能調優。(只使用標準輸出時對應用來說是黑盒。)

最終我們的技術方案是:

直接寫入

還有一種方案是直接寫入,這個其實和 kubernetes 本身就沒有太多關系了。

由業務自己調用 elasticsearch 或者其他的存儲組件的 API 進行寫入,這種通常適用于對性能要求較高的場景,略過了中間的采集步驟,直接寫入存儲端。

這個我在 VictoriaLogs:一款超低占用的 ElasticSearch 替代方案中介紹過,我需要在 broker 的攔截器中埋點消息信息,從而可以生成一個消息??的鏈路信息。

因為需要攔截消息的發送、消費的各個階段,加上并發壓力較高,所以對日志的寫入性能要求還是蠻高的。

因此就需要在攔截器中直接對寫入到日志存儲。

這里考慮到我這里的但一場景,以及對資源的消耗,最終選取了 victoriaLog 這個日志存儲。

而在發送日志的時候也得用了高性能的日志發生框架,這里選取了aliyun-log-java-producer然后做了一些定制。

這個庫支持以下一些功能:

  • 高性能:批量發送、多線程等
  • 自動重試
  • 異步非阻塞
  • 資源控制(可以對內存、數量進行控制)

因為這是為阿里云日志服務的一個組件,代碼里硬編碼了只能寫入阿里的日志服務。

所以拿來稍加改造后,現在可以支持自定義發送到任意后端,只需要在初始化時自定義實現發送回調接口即可:

ProducerConfig producerConfig = new ProducerConfig();
producerConfig.setSenderArgs(new Object[]{vlogUrl, client});
producerConfig.setSender((batch, args) -> {
    StringBuilder body = new StringBuilder();
    for (String s : batch.getLogItemsString()) {
        body.append("{\"create\":{}}");
        body.append("\n");
        body.append(s);
        body.append("\n");
    }
    RequestBody requestBody =
            RequestBody.create(MediaType.parse("application/json"), body.toString());
    Request request =
            new Request.Builder()
                    .url(String.format("%s/insert/elasticsearch/_bulk", args[0]))
                    .post(requestBody)
                    .build();

    OkHttpClient okHttpClient = (OkHttpClient) args[1];
    try (Response response = okHttpClient.newCall(request).execute()) {
        if (response.isSuccessful()) {
        } else {
            log.error("Request failed with error code: " + response);
        }
    } catch (IOException e) {
        log.error("Send vlogs failed", e);
        throw e;
    }
});
logProducer = new LogProducer(producerConfig);

考慮到這個庫只是對阿里云日志服務的一個組件,加上代碼已經很久沒維護了,所以就沒有將這部分代碼提交到社區,感興趣的評論區留言。

日志安全

日志是一個非?;A但又很敏感的功能,首先是編碼規范上要避免打印一些敏感信息;比如身份證、密碼等;同時對日志的訪問也要最好權限控制。

在我們內部的研效平臺中,對于日志、監控等功能都是和應用權限掛鉤的。

簡單來說就是關閉了統一查詢 ES 的入口,只在應用層級提供查詢,類似于:

圖來自于 orbit 產品。

OpenTelemetry

當然講到日志目前自然也逃不過 OpenTelemetry,作為當前云原生可觀測性的標準也提供了對應的日志組件。

OpenTelemetry 也定義了結構化的日志格式:

{"resourceLogs":[{"resource":{"attributes":[{"key":"resource-attr","value":{"stringValue":"resource-attr-val-1"}}]},"scopeLogs":[{"scope":{},"logRecords":[{"timeUnixNano":"1581452773000000789","severityNumber":9,"severityText":"Info""body":{"stringValue":"This is a log message"},"attributes":[{"key":"app","value":{"stringValue":"server"}},{"key":"instance_num","value":{"intValue":"1"}}],"droppedAttributesCount":1,"traceId":"08040201000000000000000000000000","spanId":"0102040800000000"},{"timeUnixNano":"1581452773000000789","severityNumber":9,"severityText":"Info","body":{"stringValue":"something happened"},"attributes":[{"key":"customer","value":{"stringValue":"acme"}},{"key":"env","value":{"stringValue":"dev"}}],"droppedAttributesCount":1,"traceId":"","spanId":""}]}]}]}

我們可以配置 otel.logs.exporter=otlp (default) 可以將日志輸出到 oetl-collector 中,再由他輸出到后端存儲中。

雖然這樣 otel-collectoer 就成為瓶頸了,但我們也可以部署多個副本來降低壓力。

同時也可以在應用中指定不同的 endpoint(otel.exporter.otlp.endpoint=http://127.0.0.1:4317) 來區分日志的 collector,與其他類型的 collector 做到資源隔離。

不過目前社區關于日志的實踐還比較少,而且由于版本 1.0 版本 release 的時間也不算長,穩定性和之前的 filebeat 相比還得需要時間檢驗。

總結

理想情況下,我們需要將可觀測性的三個重要組件都關聯起來才能更好的排查定位問題。

比如當收到監控系統通過指標變化發出的報警時,可以通過鏈路追蹤定位具體是哪個系統觸發的問題。

之后通過 traceID 定位到具體的日志,再通過日志的上下文列出更多日志信息,這樣整個鏈條就可以串聯起來,可以極大的提高效率。

參考鏈接:

  • https://github.com/aliyun/aliyun-log-java-producer。
  • https://kubernetes.io/docs/concepts/cluster-administration/logging/。
  • https://coding.net/help/docs/orbit/env/logs-event/intro.html。
  • https://opentelemetry.io/docs/concepts/signals/logs/。
責任編輯:姜華 來源: crossoverJie
相關推薦

2024-01-22 13:55:00

2025-06-13 07:30:51

2014-08-05 09:15:14

SDN

2013-07-10 16:36:02

集中式VDI分布式VDI

2025-07-31 10:00:00

AI云計算企業

2022-03-10 09:56:03

分布式云云計算架構

2011-10-19 13:53:11

2017-06-27 10:21:12

vRealize LoNSX日志管理

2015-08-20 09:25:46

2022-03-29 14:28:03

架構安全設計

2023-11-27 08:33:42

2012-02-23 23:33:37

開源memcached

2024-06-07 07:41:03

2024-12-05 07:31:16

2021-06-16 11:37:19

云計算

2018-04-03 09:27:42

分布式架構系統

2017-12-05 09:43:42

分布式系統核心

2024-05-16 07:51:55

分布式系統架構

2021-07-09 05:49:53

分布式代碼算法
點贊
收藏

51CTO技術棧公眾號

美女精品久久| 91在线视频免费91| 高清一区二区三区日本久| 黄色成年人视频在线观看| 亚洲免费观看高清完整版在线观看熊| 国产免费黄视频在线观看| 国产一区二区精品在线观看| 免费的av在线| 99久久久国产精品| 亚洲第一在线综合在线| 亚洲深深色噜噜狠狠爱网站| 欧美日本精品在线| 91亚洲人成网污www| 国产精品欧美亚洲777777| 成人精品亚洲| av在线播放亚洲| 一本一道久久a久久精品综合蜜臀| 岛国毛片在线播放| 亚洲精品美女在线观看| 久久久加勒比| 国产一级二级三级精品| 亚洲欧洲性图库| 国产传媒av在线| 成人午夜黄色影院| 成人免费毛片片v| 国产精品久久久影院| 久久天天做天天爱综合色| 蜜臀久久精品| 国产精品theporn88| 国产婷婷色一区二区三区| 97超碰国产一区二区三区| 91精品国产综合久久精品| 天天天综合网| 8x8x最新地址| 在线电影欧美成精品| 欧洲杯足球赛直播| 波多野吉衣av| 久久这里只有精品99| 亚洲性感美女99在线| 成人女性文胸| 欧美国产日本高清在线| 91视频91自| 在线观看男女av免费网址| 国产免费一区二区三区| 成人午夜伦理影院| 依依成人在线| 久久97精品久久久久久久不卡| 久久精品国产99久久| 99在线精品免费视频| 国产午夜精品全部视频播放| 国产欧美日韩在线看| 99re热在线观看| 精品在线免费观看| 国产一区高清在线| 奇米一区二区三区| 色乱码一区二区三区熟女| 欧美色图12p| jizz在亚洲| 这里只有精品在线播放| 欧美特黄一区| 亚洲视频精品在线观看| 国产日韩精品视频| 久久国产电影| 国产精品wwwww| 国产成人av一区二区三区在线观看| 激情成人在线视频| 中文字幕一区二区三中文字幕| 偷偷要色偷偷| 国产在线观看一区二区| 免费的一级黄色片| 欧美久久高跟鞋激| 国产精品久久久久久av福利软件 | 精品一区电影国产| 久久精品30| 一区二区三区免费在线看| 视频一区二区在线| 俺去啦;欧美日韩| 亚洲综合男人的天堂| 久久精品高清| 你懂的在线观看| 日韩精品电影网站| 精品中文字幕乱| 中文字幕免费观看一区| 亚洲免费影院| 欧美成人午夜77777| 午夜在线视频| 丁香六月激情网| 日韩av播放器| 国产日韩三区| 久久久久久久国产精品视频| 日韩欧美黄色动漫| 精品久久久久久久久久久下田| 亚洲大胆人体大胆做受1| 日韩亚洲不卡在线| 国产综合色一区二区三区| 日韩一区二区精品葵司在线| 三级成人在线| 自拍av在线| 中文字幕免费在线不卡| 青青草成人在线| 91麻豆精品国产91久久久| 日本一区免费视频| 国产999精品久久久久久绿帽| 欧美激情性爽国产精品17p| 国产影视一区| 成人在线视频免费看| 一级毛片在线播放| 国产精品日韩欧美一区二区| 4438x成人网最大色成网站| 亚洲区第一页| 亚洲综合电影| 四虎国产精品成人免费4hu| 午夜精品一区二区三区视频免费看| 色综合久久久久综合体桃花网| 五月综合久久| 高清电影在线观看免费| 91福利免费| 国产精品sss| 麻豆一区区三区四区产品精品蜜桃| 亚洲精品国产综合区久久久久久久| 欧美三级视频在线播放| 久久精子c满五个校花| 精品中文字幕一区二区三区四区| 国产福利影院在线观看| 国产伦精品一区二区三区高清版 | 在线日韩av片| 雨宫琴音一区二区三区| 日韩深夜视频| 国内自拍中文字幕| 欧美黄色片免费观看| 狠狠色伊人亚洲综合成人| 国产精品一区二区免费福利视频| 久草在线资源网站| 男女激情免费视频| 亚洲制服中文| 99re6热在线精品视频播放速度| 亚洲精品mp4| 久久久久久久91| 777国产偷窥盗摄精品视频| 99精彩视频| 黄色www网站| 欧美精品一二三| 国产成人自拍网| 国产女人18毛片水真多18精品 | 国产精品二区影院| 黄色的视频在线观看| 成人久久久久久久久| 国产91在线播放精品91| 欧美肥妇毛茸茸| 久久精品在线观看| 亚洲五月婷婷| www.久久久久爱免| 蝌蚪视频在线播放| 欧美日韩亚洲一| www.一区二区三区| 日韩三级影视基地| 欧美三级电影网站| 亚洲国产精品精华液2区45| 亚洲欧洲中文字幕| 精品69视频一区二区三区| 传媒视频在线| 久操网在线观看| 国产一区二区视频在线免费观看| 日韩中文字幕av| 欧美色成人综合| 国产日韩欧美精品电影三级在线| 国产精品亚洲综合久久| 四虎884aa成人精品最新| www.综合网.com| 九色视频在线播放| 男女羞羞网站| 国产av人人夜夜澡人人爽麻豆| 亚洲一区二区三区四区视频| 欧美大奶子在线| 亚洲精选一区二区| 精品视频一区三区九区| 亚洲欧美日韩在线| 成人免费av在线| 国产亚洲精品bv在线观看| 亚洲精品亚洲人成在线| 99久久精品一区二区成人| 毛片在线看网站| 最猛黑人系列在线播放| 我看黄色一级片| 女人帮男人橹视频播放| 日本一区二区三区视频在线观看 | 国产有码在线| 日韩欧美xxxx| 午夜久久久久久久久久久| 国产伦精品一区二区三区视频孕妇 | 日韩在线伦理| 欧美国产在线视频| 国产视频精品免费播放| 欧美性大战xxxxx久久久| 最新成人av在线| 91在线一区二区| 国产主播一区二区三区| 男人的天堂亚洲| 亚洲天堂一区二区三区四区| 欧美重口另类|