config: Add 20 files
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 10s
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 10s
This commit is contained in:
17
graylog-client/config/service.env
Normal file
17
graylog-client/config/service.env
Normal file
@@ -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
|
||||||
13
graylog-client/docker-compose.yml
Normal file
13
graylog-client/docker-compose.yml
Normal file
@@ -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
|
||||||
48
graylog-client/install.sh
Executable file
48
graylog-client/install.sh
Executable file
@@ -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 "========================================="
|
||||||
5
graylog-client/logs.sh
Executable file
5
graylog-client/logs.sh
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
source "${AGENT_PATH}/common.sh"
|
||||||
|
_check_required_env_vars "CONTAINER_NAME"
|
||||||
|
|
||||||
|
docker logs "$CONTAINER_NAME" "$@"
|
||||||
90
graylog-client/scripts/generate-config.sh
Executable file
90
graylog-client/scripts/generate-config.sh
Executable file
@@ -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 ^\<(?<pri>[0-9]+)\>(?<time>[^ ]* {1,2}[^ ]* [^ ]*) (?<host>[^ ]*) (?<ident>[a-zA-Z0-9_\/\.\-]*)(?:\[(?<pid>[0-9]+)\])?(?:[^\:]*\:)? *(?<message>.*)$
|
||||||
|
Time_Key time
|
||||||
|
Time_Format %b %d %H:%M:%S
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create fluent-bit.conf
|
||||||
|
cat > "${CONFIG_PATH}/fluent-bit.conf" << EOF
|
||||||
|
[SERVICE]
|
||||||
|
Flush 5
|
||||||
|
Daemon Off
|
||||||
|
Log_Level info
|
||||||
|
Parsers_File parsers.conf
|
||||||
|
|
||||||
|
# Collect Docker container logs
|
||||||
|
[INPUT]
|
||||||
|
Name forward
|
||||||
|
Listen 0.0.0.0
|
||||||
|
Port 24224
|
||||||
|
|
||||||
|
[INPUT]
|
||||||
|
Name tail
|
||||||
|
Tag docker.*
|
||||||
|
Path /var/lib/docker/containers/*/*.log
|
||||||
|
Parser docker
|
||||||
|
DB /fluent-bit/etc/docker.db
|
||||||
|
Mem_Buf_Limit 50MB
|
||||||
|
Skip_Long_Lines On
|
||||||
|
Refresh_Interval 10
|
||||||
|
|
||||||
|
# Collect syslog
|
||||||
|
[INPUT]
|
||||||
|
Name tail
|
||||||
|
Tag syslog
|
||||||
|
Path /var/log/syslog,/var/log/messages
|
||||||
|
DB /fluent-bit/etc/syslog.db
|
||||||
|
Mem_Buf_Limit 5MB
|
||||||
|
Skip_Long_Lines On
|
||||||
|
Refresh_Interval 10
|
||||||
|
|
||||||
|
# Collect auth logs
|
||||||
|
[INPUT]
|
||||||
|
Name tail
|
||||||
|
Tag auth
|
||||||
|
Path /var/log/auth.log,/var/log/secure
|
||||||
|
DB /fluent-bit/etc/auth.db
|
||||||
|
Mem_Buf_Limit 5MB
|
||||||
|
Skip_Long_Lines On
|
||||||
|
Refresh_Interval 10
|
||||||
|
|
||||||
|
# Add hostname to all records
|
||||||
|
[FILTER]
|
||||||
|
Name record_modifier
|
||||||
|
Match *
|
||||||
|
Record hostname ${HOSTNAME}
|
||||||
|
|
||||||
|
# Output to Graylog via GELF
|
||||||
|
[OUTPUT]
|
||||||
|
Name gelf
|
||||||
|
Match *
|
||||||
|
Host ${GRAYLOG_HOST}
|
||||||
|
Port ${GRAYLOG_PORT}
|
||||||
|
Mode ${GRAYLOG_PROTOCOL}
|
||||||
|
Gelf_Short_Message_Key log
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Configuration generated successfully"
|
||||||
10
graylog-client/start.sh
Executable file
10
graylog-client/start.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
source "${AGENT_PATH}/common.sh"
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
_check_required_env_vars "CONTAINER_NAME"
|
||||||
|
|
||||||
|
cd "$SCRIPT_DIR" || _die "Failed to change to script directory"
|
||||||
|
docker compose up -d || _die "Failed to start"
|
||||||
|
|
||||||
|
echo "Graylog client started"
|
||||||
9
graylog-client/status.sh
Executable file
9
graylog-client/status.sh
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
source "${AGENT_PATH}/common.sh"
|
||||||
|
_check_required_env_vars "CONTAINER_NAME"
|
||||||
|
|
||||||
|
if _is_container_running "$CONTAINER_NAME"; then
|
||||||
|
echo "Running"
|
||||||
|
else
|
||||||
|
echo "Stopped"
|
||||||
|
fi
|
||||||
10
graylog-client/stop.sh
Executable file
10
graylog-client/stop.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
source "${AGENT_PATH}/common.sh"
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
_check_required_env_vars "CONTAINER_NAME"
|
||||||
|
|
||||||
|
cd "$SCRIPT_DIR" || _die "Failed to change to script directory"
|
||||||
|
docker compose down || true
|
||||||
|
|
||||||
|
echo "Graylog client stopped"
|
||||||
17
graylog-client/template_info.env
Normal file
17
graylog-client/template_info.env
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# DO NOT EDIT THIS FILE FOR YOUR SERVICE!
|
||||||
|
# This file is replaced from the template whenever there is an update.
|
||||||
|
# Edit the service.env file to make changes.
|
||||||
|
|
||||||
|
# Template to use - always required!
|
||||||
|
TEMPLATE=graylog-client
|
||||||
|
REQUIRES_HOST_ROOT=false
|
||||||
|
REQUIRES_DOCKER=true
|
||||||
|
REQUIRES_DOCKER_ROOT=true
|
||||||
|
|
||||||
|
# Service settings
|
||||||
|
CONTAINER_NAME=graylog-client
|
||||||
|
|
||||||
|
# Image settings
|
||||||
|
IMAGE_REGISTRY="docker.io"
|
||||||
|
IMAGE_REPO="fluent/fluent-bit"
|
||||||
|
IMAGE_TAG="latest"
|
||||||
15
graylog-client/uninstall.sh
Executable file
15
graylog-client/uninstall.sh
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
source "${AGENT_PATH}/common.sh"
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
_check_required_env_vars "CONTAINER_NAME"
|
||||||
|
|
||||||
|
cd "$SCRIPT_DIR" || _die "Failed to change to script directory"
|
||||||
|
|
||||||
|
# Stop and remove containers
|
||||||
|
docker compose down || true
|
||||||
|
|
||||||
|
# Remove the container if it still exists
|
||||||
|
_remove_container "$CONTAINER_NAME" 2>/dev/null || true
|
||||||
|
|
||||||
|
echo "Graylog client uninstalled"
|
||||||
Reference in New Issue
Block a user