Export host and internal metrics for prometheus, and simplify hostname setting.

This commit is contained in:
2023-08-08 15:52:01 +01:00
parent eb8c962c4a
commit 09894bdee5

View File

@@ -7,6 +7,9 @@ job "vector" {
#host_network = "tailscale" #host_network = "tailscale"
to = 8686 to = 8686
} }
port "metrics" {
to = 9598
}
} }
ephemeral_disk { ephemeral_disk {
size = 500 size = 500
@@ -17,13 +20,14 @@ job "vector" {
config { config {
# debian instead of alpine to get journalctl # debian instead of alpine to get journalctl
image = "timberio/vector:0.31.X-debian" image = "timberio/vector:0.31.X-debian"
ports = ["api"] ports = ["api", "metrics"]
volumes = [ volumes = [
"/var/run/docker.sock:/var/run/docker.sock:ro", "/var/run/docker.sock:/var/run/docker.sock:ro",
"/var/log/glusterfs:/var/log/glusterfs:ro", "/var/log/glusterfs:/var/log/glusterfs:ro",
"/var/log/journal:/var/log/journal:ro", "/var/log/journal:/var/log/journal:ro",
"/etc/machine-id:/etc/machine-id:ro", "/etc/machine-id:/etc/machine-id:ro",
] ]
hostname = "${node.unique.name}"
} }
env { env {
@@ -32,6 +36,7 @@ job "vector" {
} }
service { service {
name = "vector"
check { check {
port = "api" port = "api"
type = "http" type = "http"
@@ -40,6 +45,11 @@ job "vector" {
timeout = "5s" timeout = "5s"
} }
} }
service {
name = "vector-metrics"
port = "metrics"
tags = ["metrics"]
}
resources { resources {
cpu = 500 # 500 MHz cpu = 500 # 500 MHz
@@ -62,7 +72,6 @@ job "vector" {
[sources.vector_raw] [sources.vector_raw]
type = "internal_logs" type = "internal_logs"
host_key = "node"
[sources.docker_raw] [sources.docker_raw]
type = "docker_logs" type = "docker_logs"
@@ -70,43 +79,33 @@ job "vector" {
type = "remap" type = "remap"
inputs = [ "docker_raw" ] inputs = [ "docker_raw" ]
source = ''' source = '''
.node = del(.label."com.hashicorp.nomad.node_name")
.job_name, err = .label."com.hashicorp.nomad.job_name" + "." + .label."com.hashicorp.nomad.task_group_name" + "." + .label."com.hashicorp.nomad.task_name" .job_name, err = .label."com.hashicorp.nomad.job_name" + "." + .label."com.hashicorp.nomad.task_group_name" + "." + .label."com.hashicorp.nomad.task_name"
result = parse_regex_all!(.message, r'^(?P<log>.+) (?P<total_requests>\d+) "(?P<frontend_name>.+)" "(?P<backend_url>.+)" (?P<duration_ms>\d+)ms$') result = parse_regex_all!(.message, r'^(?P<log>.+) (?P<total_requests>\d+) "(?P<frontend_name>.+)" "(?P<backend_url>.+)" (?P<duration_ms>\d+)ms$')
if length(result) > 0 { if length(result) > 0 {
. |= parse_apache_log!(result[0].log, "combined") . |= parse_apache_log!(result[0].log, "combined")
.remote_host = del(.host)
.backend_url = result[0].backend_url .backend_url = result[0].backend_url
.frontend_name = result[0].frontend_name .frontend_name = result[0].frontend_name
.duration_ms = to_int!(result[0].duration_ms) .duration_ms = to_int!(result[0].duration_ms)
.total_requests = to_int!(result[0].total_requests) .total_requests = to_int!(result[0].total_requests)
} }
.host = del(.label."com.hashicorp.nomad.node_name")
''' '''
[sources.glusterfs_raw] [sources.glusterfs_raw]
type = "file" type = "file"
include = [ "/var/log/glusterfs/**/*.log" ] include = [ "/var/log/glusterfs/**/*.log" ]
host_key = "node"
[sources.journald_raw] [sources.journald_raw]
type = "journald" type = "journald"
[transforms.nomadify_hostname]
type = "remap"
inputs = [
"vector_raw",
"glusterfs_raw",
"journald_raw",
]
source = '''
del(.host)
.node = "[[env "attr.unique.hostname" ]]"
'''
[sinks.loki] [sinks.loki]
type = "loki" type = "loki"
inputs = [ inputs = [
"vector_raw",
"docker_transformed", "docker_transformed",
"nomadify_hostname", "glusterfs_raw",
"journald_raw",
] ]
endpoint = "http://[[ range service "loki" ]][[ .Address ]]:[[ .Port ]][[ end ]]" endpoint = "http://[[ range service "loki" ]][[ .Address ]]:[[ .Port ]][[ end ]]"
encoding.codec = "json" encoding.codec = "json"
@@ -116,7 +115,20 @@ del(.host)
remove_label_fields = true remove_label_fields = true
healthcheck.enabled = true healthcheck.enabled = true
[sinks.loki.labels] [sinks.loki.labels]
node = "{{node}}" host = "{{host}}"
[sources.internal_metrics]
type = "internal_metrics"
[sources.host_metrics]
type = "host_metrics"
[sinks.prometheus]
type = "prometheus_exporter"
inputs = [
"internal_metrics",
"host_metrics",
]
EOH EOH
} }
kill_timeout = "30s" kill_timeout = "30s"