private static void WriteFamily(StreamWriter streamWriter, MetricFamily metricFamily) { streamWriter.WriteLine("# HELP {0} {1}", metricFamily.name, metricFamily.help); streamWriter.WriteLine("# TYPE {0} {1}", metricFamily.name, metricFamily.type); foreach (var metric in metricFamily.metric) { WriteMetric(streamWriter, metricFamily, metric); } }
private static string WriteMetric(MetricFamily family, Metric metric) { var s = new StringBuilder(); var familyName = family.name; if (metric.gauge != null) { s.AppendLine(SimpleValue(familyName, metric.gauge.value, metric.label)); } else if (metric.counter != null) { s.AppendLine(SimpleValue(familyName, metric.counter.value, metric.label)); } else if (metric.summary != null) { s.AppendLine(SimpleValue(familyName, metric.summary.sample_sum, metric.label, "_sum")); s.AppendLine(SimpleValue(familyName, metric.summary.sample_count, metric.label, "_count")); foreach (var quantileValuePair in metric.summary.quantile) { var quantile = double.IsPositiveInfinity(quantileValuePair.quantile) ? "+Inf" : quantileValuePair.quantile.ToString(CultureInfo.InvariantCulture); s.AppendLine( SimpleValue( familyName, quantileValuePair.value, metric.label.Concat(new[] { new LabelPair { name = "quantile", value = quantile } }))); } } else if (metric.histogram != null) { s.AppendLine(SimpleValue(familyName, metric.histogram.sample_sum, metric.label, "_sum")); s.AppendLine(SimpleValue(familyName, metric.histogram.sample_count, metric.label, "_count")); foreach (var bucket in metric.histogram.bucket) { var value = double.IsPositiveInfinity(bucket.upper_bound) ? "+Inf" : bucket.upper_bound.ToString(CultureInfo.InvariantCulture); s.AppendLine( SimpleValue( familyName, bucket.cumulative_count, metric.label.Concat(new[] { new LabelPair { name = "le", value = value } }), "_bucket")); } } else { // not supported } return(s.ToString()); }
private static string WriteFamily(MetricFamily metricFamily) { var s = new StringBuilder(); s.AppendLine(string.Format("# HELP {0} {1}", metricFamily.name, metricFamily.help)); s.AppendLine(string.Format("# TYPE {0} {1}", metricFamily.name, metricFamily.type)); foreach (var metric in metricFamily.metric) { s.AppendLine(WriteMetric(metricFamily, metric)); } return(s.ToString()); }
public static IEnumerable <MetricFamily> GetPrometheusMetricsSnapshot(this MetricsDataValueSource snapshot) { var result = new List <MetricFamily>(); foreach (var group in snapshot.Contexts) { foreach (var metricGroup in group.ApdexScores.GroupBy( source => source.IsMultidimensional ? source.MultidimensionalName : source.Name)) { var promMetricFamily = new MetricFamily { name = FormatName($"{group.Context}_{metricGroup.Key}"), type = MetricType.GAUGE }; foreach (var metric in metricGroup) { promMetricFamily.metric.AddRange(metric.ToPrometheusMetrics()); } result.Add(promMetricFamily); } foreach (var metricGroup in group.Gauges.GroupBy( source => source.IsMultidimensional ? source.MultidimensionalName : source.Name)) { var promMetricFamily = new MetricFamily { name = FormatName($"{group.Context}_{metricGroup.Key}"), type = MetricType.GAUGE }; foreach (var metric in metricGroup) { promMetricFamily.metric.AddRange(metric.ToPrometheusMetrics()); } result.Add(promMetricFamily); } foreach (var metricGroup in group.Counters.GroupBy( source => source.IsMultidimensional ? source.MultidimensionalName : source.Name)) { var promMetricFamily = new MetricFamily { name = FormatName($"{group.Context}_{metricGroup.Key}"), type = MetricType.GAUGE }; foreach (var metric in metricGroup) { promMetricFamily.metric.AddRange(metric.ToPrometheusMetrics()); } result.Add(promMetricFamily); } foreach (var metricGroup in group.Meters.GroupBy( source => source.IsMultidimensional ? source.MultidimensionalName : source.Name)) { var promMetricFamily = new MetricFamily { name = FormatName($"{group.Context}_{metricGroup.Key}_total"), type = MetricType.COUNTER }; foreach (var metric in metricGroup) { promMetricFamily.metric.AddRange(metric.ToPrometheusMetrics()); } result.Add(promMetricFamily); } foreach (var metricGroup in group.Histograms.GroupBy( source => source.IsMultidimensional ? source.MultidimensionalName : source.Name)) { var promMetricFamily = new MetricFamily { name = FormatName($"{group.Context}_{metricGroup.Key}"), type = MetricType.SUMMARY, }; foreach (var timer in metricGroup) { promMetricFamily.metric.AddRange(timer.ToPrometheusMetrics()); } result.Add(promMetricFamily); } foreach (var metricGroup in group.Timers.GroupBy( source => source.IsMultidimensional ? source.MultidimensionalName : source.Name)) { var promMetricFamily = new MetricFamily { name = FormatName($"{group.Context}_{metricGroup.Key}"), type = MetricType.SUMMARY, }; foreach (var timer in metricGroup) { promMetricFamily.metric.AddRange(timer.ToPrometheusMetrics()); } result.Add(promMetricFamily); } } return(result); }