Добавить vectordocker.hcl
This commit is contained in:
192
vectordocker.hcl
Normal file
192
vectordocker.hcl
Normal file
@@ -0,0 +1,192 @@
|
||||
job "vector-nm" {
|
||||
datacenters = ["dc1"]
|
||||
type = "service"
|
||||
|
||||
group "vector" {
|
||||
|
||||
# constraint {
|
||||
# attribute = "${node.unique.name}"
|
||||
# value = "felis"
|
||||
# }
|
||||
network {
|
||||
port "vector-api" {
|
||||
static = 8686
|
||||
}
|
||||
}
|
||||
service {
|
||||
name = "vector-api"
|
||||
tags = [
|
||||
"traefik.enable=true",
|
||||
"traefik.http.routers.${NOMAD_JOB_NAME}.rule=Host(`vector-api.service.lan`)",
|
||||
"traefik.http.routers.${NOMAD_JOB_NAME}.entrypoints=web",
|
||||
"traefik.http.routers.${NOMAD_JOB_NAME}.tls=false",
|
||||
"traefik.consulcatalog.connect=true"
|
||||
]
|
||||
port = "vector-api"
|
||||
|
||||
check {
|
||||
name = "vector-api"
|
||||
type = "http"
|
||||
path = "/health"
|
||||
interval = "50s"
|
||||
timeout = "2s"
|
||||
|
||||
check_restart {
|
||||
limit = 3
|
||||
grace = "30s"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
restart {
|
||||
interval = "24h"
|
||||
attempts = 1000
|
||||
delay = "30s"
|
||||
mode = "delay"
|
||||
}
|
||||
|
||||
# Монтируем Docker-сокет с хоста
|
||||
#volume "docker-sock" {
|
||||
# type = "host"
|
||||
# source = "docker-sock" # Убедитесь, что такой host volume определен на клиенте
|
||||
# read_only = true
|
||||
#}
|
||||
|
||||
|
||||
task "vector-nomad" {
|
||||
driver = "raw_exec"
|
||||
|
||||
template {
|
||||
destination = "${NOMAD_TASK_DIR}/vector.yaml"
|
||||
change_mode = "signal"
|
||||
change_signal = "SIGHUP"
|
||||
data = <<EOH
|
||||
---
|
||||
data_dir: "${NOMAD_ALLOC_DIR}/vector/data"
|
||||
|
||||
api:
|
||||
enabled: true
|
||||
address: "0.0.0.0:8686"
|
||||
|
||||
sources:
|
||||
docker_logs:
|
||||
type: docker_logs
|
||||
include_containers: ["*"] # Собираем логи всех контейнеров
|
||||
exclude_containers: [] # Можно исключить ненужные контейнеры
|
||||
|
||||
transforms:
|
||||
# Добавляем метаданные Nomad к логам
|
||||
add_nomad_metadata:
|
||||
type: remap
|
||||
inputs: ["docker_logs"]
|
||||
source: |-
|
||||
# Добавляем метаданные из переменных окружения Nomad
|
||||
.nomad = {
|
||||
"job_id": "${NOMAD_JOB_ID}",
|
||||
"job_name": "${NOMAD_JOB_NAME}",
|
||||
"task_name": "${NOMAD_TASK_NAME}",
|
||||
"alloc_id": "${NOMAD_ALLOC_ID}",
|
||||
"datacenter": "${NOMAD_DC}"
|
||||
}
|
||||
|
||||
# 2. БЕЗОПАСНО парсим JSON, ЕСЛИ поле .message - строка
|
||||
if is_string(.message) {
|
||||
# Пытаемся распарсить. В случае ошибки parsed будет null, а err - описанием ошибки.
|
||||
parsed, err = parse_json(.message)
|
||||
|
||||
if err == null {
|
||||
# Если парсинг прошел успешно И результат - объект (не массив, не строка)
|
||||
if is_object(parsed) {
|
||||
# Используем "паникующий" merge! потому что мы УВЕРЕНЫ в типах на 100%
|
||||
# . - это объект (весь лог), parsed - тоже объект (результат парсинга)
|
||||
. = merge!(., parsed)
|
||||
} else {
|
||||
# Если внутри .message был валидный JSON, но это массив или строка,
|
||||
# сохраняем его в отдельное поле, чтобы не сломать структуру.
|
||||
.parsed_json = parsed
|
||||
}
|
||||
} else {
|
||||
# Логируем ошибку парсинга (опционально, для отладки)
|
||||
.parse_error = err
|
||||
}
|
||||
}
|
||||
|
||||
# 3. (Опционально) Удаляем временное поле с ошибкой, если оно пустое
|
||||
if is_null(.parse_error) {
|
||||
del(.parse_error)
|
||||
}
|
||||
|
||||
sinks:
|
||||
openobserve:
|
||||
type: http
|
||||
inputs:
|
||||
- add_nomad_metadata
|
||||
uri: http://opob.service.lan/api/default/default/_json
|
||||
method: post
|
||||
auth:
|
||||
strategy: basic
|
||||
user: root@bb.lan
|
||||
password: SczfWK450qZ18ApY
|
||||
compression: gzip
|
||||
encoding:
|
||||
codec: json
|
||||
timestamp_format: rfc3339
|
||||
healthcheck:
|
||||
enabled: false
|
||||
|
||||
# Настройки запроса
|
||||
request:
|
||||
headers:
|
||||
Content-Type: "application/json"
|
||||
timeout_secs: 30
|
||||
|
||||
# Буферизация для надежности
|
||||
buffer:
|
||||
type: "disk"
|
||||
max_size: 268435488 # 256 MB
|
||||
when_full: "drop_newest"
|
||||
|
||||
console:
|
||||
type: console
|
||||
inputs:
|
||||
- add_nomad_metadata
|
||||
encoding:
|
||||
codec: "json"
|
||||
EOH
|
||||
}
|
||||
|
||||
|
||||
config {
|
||||
command = "/bin/bash"
|
||||
args = [
|
||||
"-c",
|
||||
<<EOF
|
||||
set -e
|
||||
|
||||
WORKDIR="/opt/vector"
|
||||
BIN="$WORKDIR/vector"
|
||||
|
||||
mkdir -p $WORKDIR
|
||||
cd $WORKDIR
|
||||
|
||||
if [ ! -f "$BIN" ]; then
|
||||
echo "Downloading weed from FTP..."
|
||||
curl -o vector ftp://172.16.11.7/dist/vector/vector-0.53
|
||||
chmod +x vector
|
||||
fi
|
||||
|
||||
echo "Starting filer sync..."
|
||||
exec $BIN -t 1 -c ${NOMAD_TASK_DIR}/vector.yaml
|
||||
EOF
|
||||
]
|
||||
}
|
||||
|
||||
resources {
|
||||
cpu = 300
|
||||
memory = 256
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user