KeiStory

728x90
반응형

C# Prometheus, OpenTelemetry 이용하여 매트릭 데이터 보기

 

이전 포스팅에 이어 진행됩니다. (Windows  기준)

2024.04.24 - [코딩/C#] - C# Metric 데이터 수집하고 모니터링 하기 (dotnet-counters)

 

C# Metric 데이터 수집하고 모니터링 하기 (dotnet-counters)

C# Metric 데이터 수집하고 모니터링 하기 (dotnet-counters) 1. 콘솔앱 생성합니다.2. 아래와 같이 매트릭이 데이터를 수집될수 있도록 코딩 합니다.using System.Diagnostics.Metrics;class Program{    static Meter m

keistory.tistory.com

 

 

1. OpenTelemetry.Exporter.Prometheus 패키지 설치

Nuget Package 에서 표시되지 않는다면 시험판 포함을 체크합니다.

위 Nuget Package 에는 아래 두 항목이 패키징되어있습니다.

OpenTelemetry 라이브러리는 이러한 측정값을 집계하고

Prometheus exporter 라이브러리는 HTTP 메트릭 엔드포인트를 통해 집계된 데이터를 사용할 수 있게 합니다.

 

2. 코드작성 및 실행

using System.Diagnostics.Metrics;

using OpenTelemetry;
using OpenTelemetry.Metrics;

class Program
{
    static Meter meter = new Meter("HatStore", "1.0.0");
    static Counter<int> hatsSold = meter.CreateCounter<int>(name: "hats-sold",
                                                            unit: "Hats",
                                                            description: "The number of hats sold in our store");
    static void Main(string[] args)
    {
        using MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder()
               .AddMeter("HatStore")
               .AddPrometheusExporter(opt =>
               {
                   opt.StartHttpListener = true;
                   opt.HttpListenerPrefixes = new string[] { $"http://localhost:9184/" };
               })
               .Build();

        Console.WriteLine("Press any key to exit");
        while (!Console.KeyAvailable)
        {
            // Pretend our store has a transaction each second that sells 4 hats
            Thread.Sleep(1000);
            Console.WriteLine($"{DateTime.Now.ToString()} : 4 {hatsSold.Name} ({hatsSold.Meter.Name})");
            hatsSold.Add(4);
        }
    }
}

위와 같이 작성 후 프로젝트를 시작해 놓습니다.

 

3. Prometheus 설정 및 구성

https://prometheus.io/docs/introduction/first_steps/

 

First steps | Prometheus

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io

위 사이트에서 아래 표시된 부분 (Download the latest release) 클릭합니다.

아래화면에서 Windows  선택 후 LTS 버전 다운로드 합니다.

아래처럼 압축을 풀고 prometheus.yml 파일에 OpenTelemetry 항목을 추가합니다.

  - job_name: 'OpenTelemetryTest'
    scrape_interval: 1s # poll very quickly for a more responsive demo
    static_configs:
      - targets: ['localhost:9184']

처음 코드에 적었던 포트(9184)와 동일한 포트로 처리합니다.

cmd 창에서 다운로드한 폴더로 이동하여 아래 명령을 수행합니다.

prometheus --config.file=prometheus.yml

아래처럼 명령이 수행되어 Prometheus 가 실행되고 대시보드에 접근할 수 있게 됩니다.

 

4. Prometheus에서 매트릭 확인

localhost:9090 페이지로 이동합니다.

아래처럼 화면이 나왔다면 정상적으로 Prometheus 가 정상 동작한 것입니다.

상단 메뉴에서 Stasus > Targets로 들어가서 제대로 State 가 UP 이 되었는지 확인합니다.

(아래와 같이 떠야 정상입니다.)

http://localhost:9184/metrics 페이지로 이동하면 코드에서 처리한 매트릭 데이터가 잘 수집되고 있는지 확인합니다.

이름을 보면 알겠지만 Unit(Hats)까지 붙어서 '-'는 '_'로 바뀌어 이름이 정해집니다. (hats_sold_Hats)

실시간으로 값이 변경되는 경우 반영되어 보여집니다.

상단의 Graph 페이지로 이동하여 hats_sold_Hats 입력 후 Enter 하거나 Execute 버튼을 클릭합니다.

위처럼 매트릭 결과를 그래프로 확인할 수 있습니다.

현재는 계속 증가만 시키고 있어서 위와 같은 그래프가 표시되었습니다.


[Source]
https://github.com/kei-soft/MetricTestConsoleApp

 

GitHub - kei-soft/MetricTestConsoleApp

Contribute to kei-soft/MetricTestConsoleApp development by creating an account on GitHub.

github.com


참고
https://learn.microsoft.com/ko-kr/dotnet/core/diagnostics/metrics-collection

 

메트릭 수집 - .NET

.NET 애플리케이션에서 메트릭을 수집하는 자습서

learn.microsoft.com

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band