我正在为我的 ASP.NET Core 3.1 应用程序设置 Prometheus 导出器。
我已经导入了
<PackageReference Include="prometheus-net.AspNetCore" Version="4.1.1" />
这就是我的配置:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseRouting();
app.UseHttpMetrics();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapMetrics();
});
}
Run Code Online (Sandbox Code Playgroud)
这将在与 ASP.NET Core 应用程序的其余部分相同的端口上公开指标端点,例如:my.api.com:80/metrics.
我需要做什么才能/metrics在另一个端口上公开端点?我希望我的 API 在端口 80 上运行,/metrics端点在端口 9102 上运行。
确实找不到任何相关文档。
编辑
我正在将其部署到 Kubernetes 中
kubernetes prometheus asp.net-core prometheus-net asp.net-core-3.1
如何在常规 ASP.NET 4.7.1 应用程序中使用 prometheus-net?在 .Net Core 中很容易,但我找不到在 4.7.1 中向 Grafana 报告指标的好方法
理想的情况是拥有/metrics报告指标的路径。
我试图创建一个粗略的测试控制器来运行,MetricServer但出现错误。
// horrible test code
[RoutePrefix("metrics")]
public class MetricsController : ApiController
{
static readonly MetricServer _server = new MetricServer(7777);
static MetricsController()
{
_server.Start();
}
[Route("")]
public async Task<IHttpActionResult> Get()
{
using (var client = new HttpClient())
{
var metrics = await client.GetAsync("http://localhost:7777/metrics");
return Content(HttpStatusCode.OK, await metrics.Content.ReadAsStringAsync(),null, metrics.Content.Headers.ContentType.ToString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
System.Net.HttpListenerException: '访问被拒绝'
我想比较以下两个彼此不同的时间序列。我要做的就是将第二时间序列的结果除以第一时间序列的结果,如果值小于1,则生成警报。我使用的查询低于我在下面提到的时间序列。如何实现我的目标?
第一次系列:
container_memory_usage_bytes {container_name =“ documentation”}
结果:
container_memory_usage_bytes{
beta_kubernetes_io_arch="amd64",
beta_kubernetes_io_fluentd_ds_ready="true",
beta_kubernetes_io_instance_type="n1-highmem-8",
beta_kubernetes_io_os="linux",
cloud_google_com_gke_nodepool="pool-1",
container_name="documentation",
failure_domain_beta_kubernetes_io_region="europe-west1",
failure_domain_beta_kubernetes_io_zone="europe-west1-b",
id="/kubepods/burstable/podb79239ff-1ee9-11e8-a6c1-42010a840fd9/3ccdaa6597d5bd306d228e37d9d4c65a9681dba2e894aa7b7ed4502ec54e5619",
image="gcr.io/ingenious-169318/publicapi/documentation@sha256:60a5454bb40ed34f24cbeb9f330e1097191754cf2890eee1ca4f2988188a7705",
instance="gke-ingenious-pool-1-bbd77706-5rbz",
job="kubernetes-cadvisor",
kubernetes_io_hostname="gke-ingenious-pool-1-bbd77706-5rbz",
name="k8s_documentation_documentation-6c4c4c9f5f-dn2bv_apimanager_b79239ff-1ee9-11e8-a6c1-42010a840fd9_0",
namespace="apimanager",
pod_name="documentation-6c4c4c9f5f-dn2bv"
}
Run Code Online (Sandbox Code Playgroud)
第二时间系列:-
kube_pod_container_resource_requests_memory_bytes {container =“ documentation”}
结果:
kube_pod_container_resource_requests_memory_bytes{
container="documentation",
instance="10.32.0.30:8080",
job="kubernetes-service-endpoints",
k8s_app="kube-state-metrics",
kubernetes_name="kube-state-metrics",
kubernetes_namespace="kube-system",
namespace="apimanager",
node="gke-ingenious-pool-1-bbd77706-pdsz",
pod="documentation-6c4c4c9f5f-mzd54"
}
Run Code Online (Sandbox Code Playgroud)
PromQL:
kube_pod_container_resource_requests_memory_bytes {container =“ documentation”} /((container_memory_usage_bytes {namespace =“ apimanager”})