我想将 ElasticAPM 代理添加到用 .NET Framework 4.8 编写的 WinForms 应用程序中。
我已经在远程机器上安装了 APM 服务器,我想在其中发送消息。
我从https://www.elastic.co/guide/en/apm/agent/dotnet/current/public-api.html完成了公共 API 的配置,但是 APM 代理无法从环境变量中读取值,所以它试图连接到 http://localhost:8200/ 而不是远程机器。
理想情况下,我希望能够从应用程序级别设置它,而不是从 ENV 读取,因为有数百个用户使用应用程序,我不想弄乱他们的 Windows 设置。
下面是我用于测试的控制台应用程序代码(我认为应该正确初始化 AgentComponents 对象):
using Elastic.Apm;
using Elastic.Apm.Config;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace elastic_apm_dotnet_framework_console
{
class Program
{
static async Task Main(string[] args)
{
SetApmAgent();
var config = Agent.Config;
await Agent.Tracer.CaptureTransaction("dummy trans", "Request", async () =>
{
var response = $"Bla bla {await GetRandomNumber()}";
});
Console.ReadKey();
}
private static void SetApmAgent()
{
var ac = new AgentComponents();
Agent.Setup(ac);
}
private static readonly Random Random = new Random();
private static async Task<int> GetRandomNumber()
{
await Task.Delay(5);
return Random.Next();
}
}
}