0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

アプリ内モニタリングに関する解説

Posted at

外部からdotnet-counterモニターを利用してアプリケーションの監視を開始することができますが、プロセス内で監視指標の収集や表示を行うことも可能です。プロセス内監視の利点として、監視とサービスの分離を完成させるために複数のサービスを起動する必要がなく、アプリケーションが起動するだけで監視指標も生成され、密接な関係にあります。

class Program
{
    static void Main()
    {
        Demo01.Run();
    }
}

public class Demo01
{
    public static void Run()
    {
        Console.WriteLine("監視開始");
        var listener = new MyEventListener();
        listener.WriteEvent += Listener_WriteEvent;
        Console.ReadLine();
    }

    private static void Listener_WriteEvent(string key, string value)
    {
        Console.WriteLine($"{key}{value}");
    }
}

public delegate void WriteContent(string key, string value);

public class MyEventListener : EventListener
{
    protected readonly string[] _countersName = new string[]
    {
        "System.Runtime"
    };

    public event WriteContent WriteEvent;

    protected override void OnEventSourceCreated(EventSource source)
    {
        if (_countersName.Contains(source.Name))
        {
            EnableEvents(source, EventLevel.Verbose, EventKeywords.All, new Dictionary<string, string>()
            {
                ["EventCounterIntervalSec"] = "1"
            });
        }
    }

    protected override void OnEventWritten(EventWrittenEventArgs eventData)
    {
        if (!eventData.EventName.Equals("EventCounters"))
            {
                return;
            }
            for (int i = 0; i < eventData.Payload.Count; ++i)
            {
                if (eventData.Payload[i] is IDictionary<string, object> eventPayload)
                {
                    var counterName = "";
                    var counterValue = "";
                    if (eventPayload.TryGetValue("DisplayName", out object displayValue))
                    {
                        counterName = displayValue.ToString();
                    }
                    if (eventPayload.TryGetValue("Mean", out object value) ||
                        eventPayload.TryGetValue("Increment", out value))
                    {
                        counterValue = value.ToString();
                    }
                    WriteEvent(counterName, counterValue);
                }
            }
        }
}

イベント監視のサブクラスを使用して、アプリケーション内で監視した指標を収集することができます。_countersNameには監視したいプロバイダーを配置します。《dotnet内のカウンター説明一》、《dotnet内のカウンター説明二》、《dotnet内のカウンター説明三》では、その説明があります。コードの20行目では、指標をコンソールに出力しているだけですが、ここではESに収集させて表示したり、この部分を時系列データベースに書き込んでGrafanaで表示することも可能です。表示については別の話題であり、ここでは詳しく述べません。

(Translated by GPT)

元のリンク:https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247484490&idx=1&sn=64344726e396b9ba06738c477a81080e&chksm=9f005b60a877d276097e53e102b54991ddc06ebb386e6e6f2d5c229a0c238fa836354a6438e2&token=418912929&lang=zh_CN#rd

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?