diff --git a/logclient/install.sh b/logclient/install.sh index bc23643..98c33eb 100755 --- a/logclient/install.sh +++ b/logclient/install.sh @@ -39,6 +39,23 @@ echo "Generating Filebeat configuration..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" bash "$SCRIPT_DIR/scripts/generate-config.sh" || _die "Failed to generate configuration" +# Create Docker volumes +CONFIG_VOLUME="${CONFIG_VOLUME:-${CONTAINER_NAME}_config}" +DATA_VOLUME="${DATA_VOLUME:-${CONTAINER_NAME}_data}" +CERTS_VOLUME="${CERTS_VOLUME:-${CONTAINER_NAME}_certs}" + +echo "Creating Docker volumes..." +docker volume create "$CONFIG_VOLUME" >/dev/null 2>&1 || true +docker volume create "$DATA_VOLUME" >/dev/null 2>&1 || true +docker volume create "$CERTS_VOLUME" >/dev/null 2>&1 || true + +# Copy config to volume +if [ -f "${CONFIG_PATH}/filebeat.yml" ]; then + echo "Copying configuration to Docker volume..." + docker run --rm -v "${CONFIG_VOLUME}:/config" -v "${CONFIG_PATH}:/source:ro" alpine \ + cp /source/filebeat.yml /config/filebeat.yml +fi + # Start the new container bash ./start.sh || _die "Failed to start Filebeat" diff --git a/logclient/scripts/generate-config.sh b/logclient/scripts/generate-config.sh index 1dd0996..5b3d5ed 100755 --- a/logclient/scripts/generate-config.sh +++ b/logclient/scripts/generate-config.sh @@ -3,7 +3,14 @@ # Generate Filebeat configuration from template # This script creates a filebeat.yml configuration file with proper authentication -CONFIG_DIR="${CONFIG_VOLUME:-${CONFIG_PATH:-./config}}" +# Determine config directory - use CONFIG_PATH from dropshell or fallback +if [ -n "$CONFIG_PATH" ]; then + CONFIG_DIR="$CONFIG_PATH" +elif [ -d "./config" ]; then + CONFIG_DIR="./config" +else + CONFIG_DIR="." +fi # Ensure config directory exists mkdir -p "$CONFIG_DIR" diff --git a/logclient/start.sh b/logclient/start.sh index 8067f90..126d642 100755 --- a/logclient/start.sh +++ b/logclient/start.sh @@ -2,6 +2,11 @@ source "${AGENT_PATH}/common.sh" _check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" +# Define volume names if not set +CONFIG_VOLUME="${CONFIG_VOLUME:-${CONTAINER_NAME}_config}" +DATA_VOLUME="${DATA_VOLUME:-${CONTAINER_NAME}_data}" +CERTS_VOLUME="${CERTS_VOLUME:-${CONTAINER_NAME}_certs}" + # Create Docker command cmd="docker run -d \ --name $CONTAINER_NAME \ diff --git a/logserver/install.sh b/logserver/install.sh index 6a85c46..48060dc 100755 --- a/logserver/install.sh +++ b/logserver/install.sh @@ -56,29 +56,68 @@ fi echo "Starting ELK stack..." docker compose up -d --build || _die "Failed to start ELK stack" -# Wait for services to be ready +# Wait for services to be ready with polling echo "Waiting for services to start..." -sleep 10 +MAX_WAIT=120 # Maximum 2 minutes +WAITED=0 +while [ $WAITED -lt $MAX_WAIT ]; do + # Check if all services are running + if bash ./status.sh 2>/dev/null | grep -q "Running"; then + echo "All services are up!" + break + fi -# Check status -bash ./status.sh || _die "Services failed to start properly" + # Show progress + echo -n "." + sleep 2 + WAITED=$((WAITED + 2)) +done +echo "" + +if [ $WAITED -ge $MAX_WAIT ]; then + echo "Warning: Services took longer than expected to start" + echo "Checking current status..." + bash ./status.sh || true +fi # Create custom user -echo "Setting up custom user..." -docker exec ${CONTAINER_NAME}_elasticsearch bash -c " - until curl -s -u elastic:${ELASTIC_PASSWORD} http://localhost:9200/_cluster/health | grep -q '\"status\":\"yellow\"\|\"status\":\"green\"'; do - sleep 2 - done +echo "Setting up custom user '${KIBANA_USERNAME:-admin}'..." +echo -n "Waiting for Elasticsearch API..." - curl -X POST -u elastic:${ELASTIC_PASSWORD} \ +# First wait for Elasticsearch to be ready +WAITED=0 +while [ $WAITED -lt 60 ]; do + if docker exec ${CONTAINER_NAME}_elasticsearch curl -s -u elastic:${ELASTIC_PASSWORD} http://localhost:9200/_cluster/health 2>/dev/null | grep -q '"status":"yellow"\|"status":"green"'; then + echo " Ready!" + break + fi + echo -n "." + sleep 2 + WAITED=$((WAITED + 2)) +done + +if [ $WAITED -lt 60 ]; then + # Now create the user + docker exec ${CONTAINER_NAME}_elasticsearch bash -c " + + result=\$(curl -s -X POST -u elastic:${ELASTIC_PASSWORD} \ -H 'Content-Type: application/json' \ http://localhost:9200/_security/user/${KIBANA_USERNAME:-admin} \ -d '{ \"password\" : \"${KIBANA_USER_PASSWORD:-changeme}\", \"roles\" : [ \"superuser\" ], \"full_name\" : \"Admin User\" - }' 2>/dev/null || true -" + }' 2>/dev/null) + + if echo \"\$result\" | grep -q '\"created\":true'; then + echo \"User created successfully\" + else + echo \"User already exists (this is fine)\" + fi + " +else + echo "Warning: Elasticsearch API not ready after 60 seconds" +fi echo "Installation of ${CONTAINER_NAME} complete" echo ""