Добавить 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