【问题标题】:How to access Npgsql counters inside of NetCore application如何访问 NetCore 应用程序中的 Npgsql 计数器
【发布时间】:2020-02-19 14:42:52
【问题描述】:

我在 Npgsql 存储库中偶然发现了可以收集计数器数据的问题:https://github.com/npgsql/npgsql/issues/1725

是否有任何关于如何访问这些计数器的示例或信息?

通过引用以下文章https://github.com/dotnet/diagnostics/blob/master/documentation/design-docs/eventcounters.md,我尝试了以下操作,但没有运气,也没有事件计数器的数据(如idle-connections 等) 只有CommandStartCommandEnd

 class Program
    {
        static void Main(string[] args)
        {
            var listener = new TestEventListener();

            while (true)
            {
                using var cn = new Npgsql.NpgsqlConnection("...");  cn.Open();
                var cmd = new NpgsqlCommand("select 1", cn); cmd.ExecuteNonQuery();
            }
        }
    }

    class TestEventListener : EventListener
    {
        private readonly EventLevel level = EventLevel.Verbose;

        protected override void OnEventWritten(EventWrittenEventArgs eventData)
        {
            Console.WriteLine($"{eventData.EventName}");

            if (eventData.EventName.Equals("EventCounters", StringComparison.OrdinalIgnoreCase))
            {
                for (var i = 0; i < eventData.Payload.Count; i++)
                {
                    if (eventData.Payload[i] is IDictionary<string, object> payload)
                    {
                        Console.WriteLine(payload);
                    }

                }
            }
        }

        protected override void OnEventSourceCreated(EventSource eventSource)
        {
            if (eventSource.Name.Equals("Npgsql"))
            {
                var refreshInterval = new Dictionary<string, string>()
                {
                    { "connection-pools", "1" },
                    { "idle-connections", "1" },
                    { "busy-connections", "1" }
                };

                EnableEvents(eventSource, level, EventKeywords.None, refreshInterval);
            }

            base.OnEventSourceCreated(eventSource);
        }
    }

我看到这些计数器通过运行 dotnet counters monitor Npgsql -p &lt;pid&gt; 确实可以工作,但是如何在代码中执行呢?

【问题讨论】:

    标签: npgsql system.diagnostics


    【解决方案1】:

    答案是跟随documentm并提供document中指定的实际参数:

    Dictionary<string, string> refreshInterval = new Dictionary<string, string>()
            {
                { "EventCounterIntervalSec", "1" }
            };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多