ASP.NET Core 集成Prometheus+grafana

来源:https://www.cnblogs.com/asd14828/archive/2020/03/30/12579605.html
-Advertisement-
Play Games

相關主頁 Prometheus https://prometheus.io/ grafana https://grafana.com/ 安裝Prometheus Linux 可以參考https://www.cnblogs.com/linkanyway/p/Configure-a-Prometheus ...


  • 相關主頁 

         Prometheus https://prometheus.io/

         grafana https://grafana.com/

  • 安裝Prometheus

        Linux 可以參考https://www.cnblogs.com/linkanyway/p/Configure-a-Prometheus-Monitoring-Server-with-a-Gr.html

        windows:

           下載地址:https://prometheus.io/download/

            下載對應windows版本

             

              解壓後在命令行運行 prometheus.exe

             

             然後訪問 http://localhost:9090/

             出現以下頁面說明啟動成功:

             

             如果要添加監視伺服器可以配置:prometheus.yml   

global:
 scrape_interval:     15s
 evaluation_interval: 15s
scrape_configs:
 - job_name: 'prometheus'
   static_configs:
   - targets: ['localhost:9090']
 - job_name: 'node_exporter'
   scrape_interval: 5s
   static_configs:
   - targets: ['localhost:9100']
  • node-exporter 

          node-exporter是prometheus的服務提供者。

          windows版本為:

           https://github.com/martinlindhe/wmi_exporter

          下載最新的版本。啟動後的預設埠是9182

  • 安裝grafana

       下載地址:https://grafana.com/grafana/download?platform=windows

       

         本人選擇的是壓縮包下載,解壓後在命令行運行 grafana-server.exe

         

         訪問http://localhost:3000/

         出現以下頁面說明啟動成功

         

         初始用戶名和密碼都是 admin

         grafana配置prometheus數據源:

         

         選擇Prometheus數據源

         

          

        配置儀錶盤

        在https://grafana.com/grafana/dashboards?orderBy=name&direction=asc選擇合適的儀錶盤

        

           導入儀錶板:

            

            選擇import

            

            然後輸入之前記錄的id

            

             選擇prometheus的數據源,之後打開dashboard就可以看到漂亮的儀錶盤了

            

  •  AspNet Core   配置

          參考 https://www.c-sharpcorner.com/article/reporting-metrics-to-prometheus-in-asp-net-core/

         NuGet引用:prometheus-net.AspNetCore

         

public class Startup  
{  
    // others ...  
      
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
    {  
        // others ...  
  
        app.UseMetricServer();  
    }  
}  

      啟動應用程式訪問 /metrics    出現以下頁面說明配置成功

      

 

       例如,我們希望能夠統計每個API請求次數(200表示成功,500表示錯誤)。

       

public class RequestMiddleware  
{  
    private readonly RequestDelegate _next;  
    private readonly ILogger _logger;  
  
    public RequestMiddleware(  
        RequestDelegate next  
        , ILoggerFactory loggerFactory  
        )  
    {  
        this._next = next;  
        this._logger = loggerFactory.CreateLogger<RequestMiddleware>();  
    }  
      
    public async Task Invoke(HttpContext httpContext)  
    {  
        var path = httpContext.Request.Path.Value;  
        var method = httpContext.Request.Method;  
  
        var counter = Metrics.CreateCounter("prometheus_demo_request_total", "HTTP Requests Total", new CounterConfiguration  
        {  
            LabelNames = new[] { "path", "method", "status" }  
        });  
  
        var statusCode = 200;  
  
        try  
        {  
            await _next.Invoke(httpContext);  
        }  
        catch (Exception)  
        {  
            statusCode = 500;  
            counter.Labels(path, method, statusCode.ToString()).Inc();  
  
            throw;  
        }  
          
        if (path != "/metrics")  
        {  
            statusCode = httpContext.Response.StatusCode;  
            counter.Labels(path, method, statusCode.ToString()).Inc();  
        }  
    }  
}  
  
public static class RequestMiddlewareExtensions  
{          
    public static IApplicationBuilder UseRequestMiddleware(this IApplicationBuilder builder)  
    {  
        return builder.UseMiddleware<RequestMiddleware>();  
    }  
}  

    修改Startup

public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
{  
    // others ...  
  
    app.UseMetricServer();  
  
    app.UseRequestMiddleware();  
}  

   修改api代碼

[HttpGet]  
public ActionResult<IEnumerable<string>> Get()  
{  
    if(new System.Random().NextDouble() > 0.5)  
    {  
        throw new System.Exception("test exception");  
    }  
  
    return new string[] { "value1", "value2" };  
}  

  

     然後在prometheus.yml添加配置

     

scrape_configs:  
- job_name: mydemo  
  scrape_interval: 15s  
  scrape_timeout: 10s  
  metrics_path: /metrics  
  scheme: http  
  static_configs:  
  - targets:  
    - localhost:44363   

 

  • Grafana集成到自己的Web項目

        Web項目中我使用iframe直接嵌套進去的

       

  但是瀏覽器緩存清除了或者session失效了,每次進入Web頁面看Grafana的時候就需要重新登錄,在官方社區查找,並沒有太好的執行辦法,最後決定把Grafana設置成匿名登錄:

  修改conf/ custom.ini目錄下的預設配置文件內容:
找到:# enable anonymous access

      

 

 然後重啟grafana服務(systemctl restart grafana-server)就可以。

  • Grafana分享集成

     

 

 



        


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

-Advertisement-
Play Games
更多相關文章
  • 前言 Python爬蟲要經歷爬蟲、爬蟲被限制、爬蟲反限制的過程。當然後續還要網頁爬蟲限制優化,爬蟲再反限制的一系列道高一尺魔高一丈的過程。爬蟲的初級階段,添加headers和ip代理可以解決很多問題。 PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取http://t.cn/A6Z ...
  • a>使用的軟體是vs2017和sqlServer2012,使用的ASP.NET控制項是sqlDataSource、dropDownlist和UpdatePanel. b>打開sqlServer,以window身份驗證登錄,建立省份表與市區表,如圖1.1和圖1.2 圖1.1 省份表 圖1.2 市區表 c ...
  • 前言 AutoWrapper是一個簡單可自定義全局異常處理程式和ASP.NET Core API響應的包裝。他使用ASP.NET Core middleware攔截傳入的HTTP請求,並將最後的結果使用統一的格式來自動包裝起來.目的主要是讓我們更多的關註業務特定的代碼要求,並讓包裝器自動處理HTTP ...
  • ViewComponent的一種使用方法 最近在一個自己新建的Core項目中想使用Html.Action(),突然發現這個方法已經沒了,下麵我按照官網(https://docs.microsoft.com/zh cn/aspnet/core/mvc/views/view components?vie ...
  • 一、什麼是ThreadPool 線程池(源碼) 1.線程池顧名思義,有我們的系統創建一個容器裝載著我們的線程,由CLR控制的所有AppDomain共用。線程池可用於執行任務、發送工作項、處理非同步 I/O、代表其他線程等待以及處理計時器。所以使用線程池不需要自己創建線程,而是通過線程池來創建和執行和管 ...
  • 配置規則 命令行配置提供程式 環境變數配置提供程式 文件配置提供程式 配置的讀取 自定義配置數據源 ASP.NET Core中的配置項可以通過命令行、環境變數、json/xml/ini配置文件來提供。 Web應用在生成主機時會調用CreateDefaultBuilder方法,這個方法按照下麵的順序添 ...
  • 下麵2個service中,方法體均一樣。只是其中service名,參數和url路徑不一樣。 原因是曾經對項目升級或是重構留下來的結果。 由於程式中N多處地方有引用,又不能合併它,刪除更不用說了。 因為,Insus.NET為了讓其更好維護,因此寫了另外一個Service來進行重構它們: 好了,博文中最 ...
  • 1、創建一個Asp.Net Core Web應用程式 1.1、打開VS2019 新建項目 1.2、選好項目位置後進入選擇界面,選擇Web應用程式 1.3、進去的頁面結構如下 Pages 文件夾:包含 Razor 頁面和支持文件。 每個 Razor 頁面都是一對文件: 一個 .cshtml 文件,其中 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...