in apisix/plugins/prometheus/exporter.lua [112:210]
function _M.http_init(prometheus_enabled_in_stream)
if ngx.get_phase() ~= "init" and ngx.get_phase() ~= "init_worker" then
if prometheus_bkp then
prometheus = prometheus_bkp
end
return
end
clear_tab(metrics)
local metric_prefix = "apisix_"
local attr = plugin.plugin_attr("prometheus")
if attr and attr.metric_prefix then
metric_prefix = attr.metric_prefix
end
local status_metrics_exptime = core.table.try_read_attr(attr, "metrics",
"http_status", "expire")
local latency_metrics_exptime = core.table.try_read_attr(attr, "metrics",
"http_latency", "expire")
local bandwidth_metrics_exptime = core.table.try_read_attr(attr, "metrics",
"bandwidth", "expire")
local upstream_status_exptime = core.table.try_read_attr(attr, "metrics",
"upstream_status", "expire")
prometheus = base_prometheus.init("prometheus-metrics", metric_prefix)
metrics.connections = prometheus:gauge("nginx_http_current_connections",
"Number of HTTP connections",
{"state"})
metrics.requests = prometheus:gauge("http_requests_total",
"The total number of client requests since APISIX started")
metrics.etcd_reachable = prometheus:gauge("etcd_reachable",
"Config server etcd reachable from APISIX, 0 is unreachable")
metrics.node_info = prometheus:gauge("node_info",
"Info of APISIX node",
{"hostname"})
metrics.etcd_modify_indexes = prometheus:gauge("etcd_modify_indexes",
"Etcd modify index for APISIX keys",
{"key"})
metrics.shared_dict_capacity_bytes = prometheus:gauge("shared_dict_capacity_bytes",
"The capacity of each nginx shared DICT since APISIX start",
{"name"})
metrics.shared_dict_free_space_bytes = prometheus:gauge("shared_dict_free_space_bytes",
"The free space of each nginx shared DICT since APISIX start",
{"name"})
metrics.upstream_status = prometheus:gauge("upstream_status",
"Upstream status from health check",
{"name", "ip", "port"},
upstream_status_exptime)
metrics.status = prometheus:counter("http_status",
"HTTP status codes per service in APISIX",
{"code", "route", "matched_uri", "matched_host", "service", "consumer", "node",
unpack(extra_labels("http_status"))},
status_metrics_exptime)
local buckets = DEFAULT_BUCKETS
if attr and attr.default_buckets then
buckets = attr.default_buckets
end
metrics.latency = prometheus:histogram("http_latency",
"HTTP request latency in milliseconds per service in APISIX",
{"type", "route", "service", "consumer", "node", unpack(extra_labels("http_latency"))},
buckets, latency_metrics_exptime)
metrics.bandwidth = prometheus:counter("bandwidth",
"Total bandwidth in bytes consumed per service in APISIX",
{"type", "route", "service", "consumer", "node", unpack(extra_labels("bandwidth"))},
bandwidth_metrics_exptime)
if prometheus_enabled_in_stream then
init_stream_metrics()
end
end