From 04e1c7b8f7c4e060f85f17fad4e60d90b895571f Mon Sep 17 00:00:00 2001 From: j Date: Tue, 27 Jan 2026 18:11:37 +1300 Subject: [PATCH] config: Add 20 files --- graylog-client/config/service.env | 17 +++++ graylog-client/docker-compose.yml | 13 ++++ graylog-client/install.sh | 48 ++++++++++++ graylog-client/logs.sh | 5 ++ graylog-client/scripts/generate-config.sh | 90 +++++++++++++++++++++++ graylog-client/start.sh | 10 +++ graylog-client/status.sh | 9 +++ graylog-client/stop.sh | 10 +++ graylog-client/template_info.env | 17 +++++ graylog-client/uninstall.sh | 15 ++++ 10 files changed, 234 insertions(+) create mode 100644 graylog-client/config/service.env create mode 100644 graylog-client/docker-compose.yml create mode 100755 graylog-client/install.sh create mode 100755 graylog-client/logs.sh create mode 100755 graylog-client/scripts/generate-config.sh create mode 100755 graylog-client/start.sh create mode 100755 graylog-client/status.sh create mode 100755 graylog-client/stop.sh create mode 100644 graylog-client/template_info.env create mode 100755 graylog-client/uninstall.sh diff --git a/graylog-client/config/service.env b/graylog-client/config/service.env new file mode 100644 index 0000000..ca53ad8 --- /dev/null +++ b/graylog-client/config/service.env @@ -0,0 +1,17 @@ +# Graylog Client Configuration (Fluent Bit) +CONTAINER_NAME=graylog-client + +# Server settings (REQUIRED by dropshell) +SSH_USER="root" + +# REQUIRED: Graylog server connection +GRAYLOG_HOST= +GRAYLOG_PORT=12201 + +# Protocol: "udp" or "tcp" (default: udp) +GRAYLOG_PROTOCOL=udp + +# Optional: Set a custom hostname label (defaults to actual hostname) +# HOSTNAME_LABEL= + +TEMPLATE=graylog-client diff --git a/graylog-client/docker-compose.yml b/graylog-client/docker-compose.yml new file mode 100644 index 0000000..9fcea00 --- /dev/null +++ b/graylog-client/docker-compose.yml @@ -0,0 +1,13 @@ +services: + fluent-bit: + image: ${IMAGE_REGISTRY}/${IMAGE_REPO}:${IMAGE_TAG} + container_name: ${CONTAINER_NAME} + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - /var/log:/var/log:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - ${CONFIG_PATH}/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf:ro + - ${CONFIG_PATH}/parsers.conf:/fluent-bit/etc/parsers.conf:ro + environment: + - HOSTNAME=${HOSTNAME_LABEL:-${HOSTNAME}} + restart: unless-stopped diff --git a/graylog-client/install.sh b/graylog-client/install.sh new file mode 100755 index 0000000..1c0d52d --- /dev/null +++ b/graylog-client/install.sh @@ -0,0 +1,48 @@ +#!/bin/bash +source "${AGENT_PATH}/common.sh" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +_check_required_env_vars "CONTAINER_NAME" "GRAYLOG_HOST" "GRAYLOG_PORT" + +# Check Docker +_check_docker_installed || _die "Docker test failed" + +# Test connectivity to Graylog server +echo "Testing connectivity to Graylog at ${GRAYLOG_HOST}:${GRAYLOG_PORT}..." +if command -v nc >/dev/null 2>&1; then + nc -zv -w3 "$GRAYLOG_HOST" "$GRAYLOG_PORT" 2>/dev/null || echo "WARNING: Cannot connect to Graylog server. Will retry when container starts." +else + echo "Note: 'nc' not installed, skipping connectivity test" +fi + +# Stop any existing container +bash ./stop.sh 2>/dev/null || true + +# Generate configuration +echo "Generating configuration..." +HOSTNAME=$(hostname) +export HOSTNAME CONFIG_PATH GRAYLOG_HOST GRAYLOG_PORT GRAYLOG_PROTOCOL +bash "$SCRIPT_DIR/scripts/generate-config.sh" || _die "Failed to generate configuration" + +# Start the client +echo "Starting Graylog Client..." +cd "$SCRIPT_DIR" || _die "Failed to change to script directory" +docker compose up -d || _die "Failed to start" + +echo "" +echo "=========================================" +echo "Graylog Client Installed!" +echo "=========================================" +echo "" +echo "Shipping logs to: ${GRAYLOG_HOST}:${GRAYLOG_PORT} (${GRAYLOG_PROTOCOL:-udp})" +echo "Hostname label: $(hostname)" +echo "" +echo "Collecting:" +echo " - All Docker container logs" +echo " - System logs (/var/log/syslog, /var/log/messages)" +echo " - Auth logs (/var/log/auth.log, /var/log/secure)" +echo "" +echo "IMPORTANT: Create a GELF input in Graylog:" +echo " System -> Inputs -> Select 'GELF UDP' or 'GELF TCP'" +echo " Set port to ${GRAYLOG_PORT}" +echo "=========================================" diff --git a/graylog-client/logs.sh b/graylog-client/logs.sh new file mode 100755 index 0000000..cd2b3bc --- /dev/null +++ b/graylog-client/logs.sh @@ -0,0 +1,5 @@ +#!/bin/bash +source "${AGENT_PATH}/common.sh" +_check_required_env_vars "CONTAINER_NAME" + +docker logs "$CONTAINER_NAME" "$@" diff --git a/graylog-client/scripts/generate-config.sh b/graylog-client/scripts/generate-config.sh new file mode 100755 index 0000000..e36c532 --- /dev/null +++ b/graylog-client/scripts/generate-config.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# Generate Fluent Bit configuration for Graylog + +set -euo pipefail + +# Required environment variables +: "${CONFIG_PATH:?CONFIG_PATH is required}" +: "${GRAYLOG_HOST:?GRAYLOG_HOST is required}" +: "${GRAYLOG_PORT:?GRAYLOG_PORT is required}" +: "${GRAYLOG_PROTOCOL:=udp}" +: "${HOSTNAME:=$(hostname)}" + +# Create parsers.conf +cat > "${CONFIG_PATH}/parsers.conf" << 'EOF' +[PARSER] + Name docker + Format json + Time_Key time + Time_Format %Y-%m-%dT%H:%M:%S.%L + Time_Keep On + +[PARSER] + Name syslog + Format regex + Regex ^\<(?[0-9]+)\>(?