.NET程式對接 OpenTelemetry logs

来源:https://www.cnblogs.com/kklldog/p/18227932/opentelemetry-logs
-Advertisement-
Play Games

OpenTelemetry 簡介 OpenTelemetry 是一個由 CNCF(Cloud Native Computing Foundation)托管的開源項目,旨在為觀察性(Observability)提供一套全面的工具,包括度量(Metrics)、日誌(Logs)和追蹤(Traces)。它的 ...


OpenTelemetry 簡介

OpenTelemetry 是一個由 CNCF(Cloud Native Computing Foundation)托管的開源項目,旨在為觀察性(Observability)提供一套全面的工具,包括度量(Metrics)、日誌(Logs)和追蹤(Traces)。它的目標是為所有類型的遙測數據提供一種標準化的方法。
OpenTelemetry 提供了一套 API 和 SDK,使得開發者可以在他們的應用程式中生成和收集遙測數據。此外,OpenTelemetry 還提供了一套收集器(Collector),可以接收、處理和導出遙測數據,以便於後續的分析和可視化。
本文不是用來介紹 OpenTelemetry 的,所以更多的細節就不提了。

OpenTelemetry 的優點

OpenTelemetry 的主要優點是其廣泛的相容性和靈活性。它支持多種編程語言,包括 Java、Python、Go、JavaScript 和 .NET 等。此外,它還可以與多種後端服務進行集成,包括但不限於 Prometheus、Jaeger、Zipkin 和 Grafana 等。

Otlp

總的來說 OpenTelemetry 最大的優點是他的 “標準化”。在數字的世界里,標準才是王道,比如 TCP, Http。OpenTelemetry 定義了 Otlp(OpenTelemetry Protocol) 協議。通過 Otlp 對接其他組件。因為大家都知道市面上做觀測的產品有很多,有 Elastic APM 這種全家桶,有專註於 Traceing 的 Jaeger,有專註日誌的 loki 跟 Seq。
按照傳統,當我們要對接這些組件的時候我們需要導入特定的包,這樣其實是讓我們的產品跟某個第三方的組件做了深度綁定。比如 AgileConfig 如果對接了 Seq,那麼當你想看日誌的時候你必須安裝一個 Seq。
但是現在使用 Otlp 的話,問題就不存在了。我們的應用程式不需要對接特定的三方組件。我們只需要對接 Otlp 就行了。因為他是標準的協議,所以只要是實現了 Otlp 協議的組件後面都可以很方便的跟應用程式做對接。
這一點對做公共組件的項目非常有用。比如 AgileConfig 你不能要求用戶非要安裝一個 Seq。用戶的生產環境可能是 Elastic。

Seq

Seq 是一款使用現代化技術(.NET)構建的結構化日誌存儲,查詢,分析工具。比起 ELK 這種組合要輕量級許多。只需要一個安裝包就具有數據存儲,查詢,圖表分析功能。它對 windows 友好,直接提供了安裝包。當然也可以使用 docker 來部署。Seq 對於單個用戶是免費的,比較遺憾的是並不開源。Seq 一個比較強大的功能是提供了類似 Sql 語句的數據查詢及處理能力,使得用戶可以直接寫 Select from 來得到自己想要的數據。

示例:在 .NET 中使用 OpenTelemetry logs 對接 Seq

下麵讓我們來演示一下 .NET 項目如何對接 OpenTelemetry。註意這次我們只演示如何對接 logs,其他兩個 tracesmetrics 因為概念上有點複雜所以放到後面再說。
首先,我們需要在 .NET 項目中安裝 OpenTelemetry。你可以通過 NuGet 包管理器來安裝。

  • 在你的項目文件中添加以下包:
			<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
		<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />

以上我們可以看到我們並不依賴任何 Seq 相關的包。

  • 獲取 Seq 的 otlp logs endpoint,通過查詢 Seq 文檔,得知 logs 的 endpoint 如下:
http://xxx:5341/ingest/otlp/v1/logs
  • 接下來,我們需要在 Program.cs 文件中配置 OpenTelemetry logs:
var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddOpenTelemetry(options =>
{
    options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName));
    options.IncludeScopes = true;
    options.AddOtlpExporter(otlpOptions =>
    {
        otlpOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
        otlpOptions.Endpoint = new Uri("http://xxx:5341/ingest/otlp/v1/logs");
    });
});

現在,我們可以開始在 .NET 應用程式中記錄日誌了。

  • 你可以使用 ILogger 介面來記錄日誌,如下所示:
using Microsoft.AspNetCore.Mvc;

namespace WebApplication2.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            _logger.LogInformation("Hi......");

            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}

每次訪問介面的時候我們都可以在 Seq 里查詢到對應的日誌內容。這說明通過 Otlp 對接 Seq 成功了。

總結

通過使用 OpenTelemetry,你可以輕鬆地收集和分析你的應用程式的遙測數據,從而更好地理解和優化你的應用程式的性能和行為。OpenTelemetry 提供了一套通用的傳輸協議 Otlp。這可以使我們做設計跟開發產品或項目的時候輕鬆跟第三方可觀測組件進行解耦。

關註我的公眾號一起玩轉技術

QQ群:1022985150 VX:kklldog 一起探討學習.NET技術
作者:Agile.Zhou(kklldog)
出處:http://www.cnblogs.com/kklldog/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.線程池本質 ​ 多個線程組成的一個集合,目的為了併發執行任務,定義時是一個結構體,成員有互斥鎖,條件變數,任務鏈隊列指針,任務鏈隊列中等待的任務個數,當前活躍的線程數量,線程ID,線程銷毀標記等 2.線程池的關鍵技術 (1)萬能函數指針(通用函數指針): *void *(*p)(void ) ( ...
  • 要求:調用PLL—IP核,50Mhz晶振輸入,輸出四路時鐘不同信號:100Mhz,25Mhz,50Mhz(90°相位),50Mhz(20%占空比)。 晶元型號:cyclone Ⅳ EP4CE10F17C8 平臺工具:Quartus II 15.0 (64-bit)、Modelsim SE-64 ... ...
  • Redis是基於Reactor模式開發的網路事件處理器,這個處理器是單線程的,所 以redis是單線程的。 為什麼它是單線程還那麼快呢? 主要有以下幾個原因: 一、純記憶體操作 由於Redis是純記憶體操作,相比於磁碟來說,記憶體就快得多,這個是Redis快的主要 原因。 二、多路復用I/O機制(NIO) ...
  • 1. MyBatis中的介面代理機制及其使用 @目錄1. MyBatis中的介面代理機制及其使用2. 實操2.1 準備工作2.2 insert 增加操作2.3 delete 刪除操作2.4 update 修改操作2.5 select 查詢一條記錄操作2.6 select 查詢多條記錄操作3. 總結: ...
  • 最近在項目中,為了演算法結果的可視化,需要用到混淆矩陣(Confusion Matrix),而網上資源大多是基於Python繪製的混淆矩陣,並且是輸出圖片格式,並不能響應用戶點擊,今天以一個簡單的小例子,簡述如何通過WPF繪製混淆矩陣,並可響應用戶點擊事件,僅供學習分享使用,如有不足之處,還請指正。 ...
  • ReZero AP ReZero是一款.NET中間件 : 一款通過界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 ReZero生成器功能簡介 1、表文檔導出:支持目錄導航 2、線上創建表、線上建庫 3、一鍵導入現有表 4、模版線上調試 ...
  • DeveloperSharp系列近期又被製造業ERP、民航飛行App、建築BIM、電力掌上營業廳、等多家大型採用,站在巨人的肩膀上你能走的更遠。 支持.Net Core2.0及以上,支持.Net Framework4.0及以上 數據分頁,幾乎是任何應用系統的必備功能。但當數據量較大時,分頁操作的效率 ...
  • 為什麼0.1 + 0.2 不等於 0.3?為什麼16777216f 等於 16777217f?為什麼金錢計算都推薦用decimal?本文主要學習瞭解一下數字背後不為人知的存儲秘密。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...