Table of Contents
Nomad prometheus job
job 파일 생성
vi prometheus.nomad
-----------------------------
job "prometheus" {
datacenters = ["dc1"]
group "prometheus" {
count = 1
network {
port "prometheus_ui" {}
}
task "prometheus" {
driver = "docker"
config {
image = "prom/prometheus:v2.25.0"
ports = ["prometheus_ui"]
# host 로 설정했으므로 127.0.0.1 는 호스트를 가르킨다.
network_mode = "host"
auth_soft_fail = true
args = [
"--config.file=/etc/prometheus/config/prometheus.yml",
"--storage.tsdb.path=/prometheus",
"--web.listen-address=0.0.0.0:${NOMAD_PORT_prometheus_ui}",
"--web.console.libraries=/usr/share/prometheus/console_libraries",
"--web.console.templates=/usr/share/prometheus/consoles",
# for Thanos
# "--storage.tsdb.max-block-duration=2h",
# "--storage.tsdb.min-block-duration=2h",
]
volumes = [
"local/config:/etc/prometheus/config",
]
}
template {
data = <<EOH
---
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
metrics_path: /metrics
consul_sd_configs:
- server: '127.0.0.1:8500'
services: ['prometheus']
- job_name: consul
metrics_path: /v1/agent/metrics
params:
format: ['prometheus']
static_configs:
- targets:
- '127.0.0.1:8500'
- job_name: nomad
metrics_path: /v1/metrics
params:
format: ['prometheus']
consul_sd_configs:
- server: '127.0.0.1:8500'
services: ['nomad','nomad-client']
relabel_configs:
- source_labels: ['__meta_consul_tags']
regex: .*,http,.*
action: keep
EOH
change_mode = "signal"
change_signal = "SIGHUP"
destination = "local/config/prometheus.yml"
}
resources {
cpu = 100
memory = 256
}
service {
name = "prometheus"
port = "prometheus_ui"
check {
type = "http"
path = "/-/healthy"
interval = "10s"
timeout = "2s"
}
}
}
}
}
-----------------------------
job 실행
Nomad server 에 접속해서 실행합니다.
nomad job run prometheus.nomad
haproxy 연동
-
고정 포트 할당 :
port "prometheus_ui" { static = 9090 }
-
frontend 설정 :
NOMAD_PORT_포트명
-
backend 설정 :
_prometheus._tcp.service.consul
에서prometheus
가 job 서비스명
service { name = "prometheus" }
job "haproxy" {
datacenters = ["dc1"]
type = "system" # 모든 노드에 자동설치
group "haproxy" {
count = 1
network {
port "haproxy_ui" {
static = 4936
}
port "prometheus_ui" {
static = 9090
}
port "haproxy_exporter" {}
}
task "haproxy" {
driver = "docker"
config {
image = "haproxy:2.4.4"
ports = ["haproxy_ui"]
auth_soft_fail = true
# host 로 설정했으므로 127.0.0.1 는 호스트를 가르킨다.
network_mode = "host"
volumes = [
"local/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg",
"/ssl/:/ssl/",
]
}
template {
data = <<EOF
global
maxconn 8192
defaults
mode http
timeout client 10s
timeout connect 5s
timeout server 10s
timeout http-request 10s
option forwardfor
frontend stats
bind *:{{ env "NOMAD_PORT_haproxy_ui" }}
stats uri /
stats show-legends
no log
frontend prometheus_ui_front
bind *:{{ env "NOMAD_PORT_prometheus_ui" }}
default_backend prometheus_ui_back
backend prometheus_ui_back
balance roundrobin
server-template prometheus_ui 5 _prometheus._tcp.service.consul resolvers consul resolve-opts allow-dup-ip resolve-prefer ipv4 check
resolvers consul
nameserver consul 127.0.0.1:8600
accepted_payload_size 8192
hold valid 5s
EOF
destination = "local/haproxy.cfg"
change_mode = "signal"
change_signal = "SIGUSR1"
}
resources {
cpu = 500
memory = 128
}
service {
name = "haproxy-ui"
port = "haproxy_ui"
check {
type = "http"
path = "/"
interval = "10s"
timeout = "2s"
}
}
}
task "haproxy-exporter" {
driver = "docker"
lifecycle {
hook = "prestart"
sidecar = true
}
config {
image = "prom/haproxy-exporter:v0.10.0"
ports = ["haproxy_exporter"]
network_mode = "host"
auth_soft_fail = true
args = [
"--web.listen-address",
":${NOMAD_PORT_haproxy_exporter}",
"--haproxy.scrape-uri",
"http://${NOMAD_ADDR_haproxy_ui}/?stats;csv",
]
}
resources {
cpu = 100
memory = 32
}
service {
name = "haproxy-exporter"
port = "haproxy_exporter"
check {
type = "http"
path = "/metrics"
interval = "10s"
timeout = "2s"
}
}
}
}
}
http://<노마드 클라이언트 아이피>:9090/ 에 접속하면,
prometheus 가 실행되고 있는 것을 볼 수 있습니다.