Fix unsupported settings in elasticsearch.yml - Remove processors and bootstrap.system_call_filter settings

This commit is contained in:
Andreas Düren 2025-03-16 18:17:18 +01:00
parent c2301bb8bb
commit 3743e382b7
2 changed files with 70 additions and 24 deletions

View File

@ -55,15 +55,11 @@ indices.queries.cache.size: 15%
thread_pool.write.queue_size: 1000
thread_pool.search.queue_size: 1000
# I/O optimization
bootstrap.system_call_filter: false
# ---------------------------------- Index Templates ---------------------------
# Instead of setting index settings directly (which is not allowed),
# we configure index templates that will be applied to new indices.
# Elasticsearch will automatically apply these templates to new indices.
# The following settings MUST be removed from this file:
# IMPORTANT: Index-level settings MUST NOT be placed in this configuration file.
# These settings are now applied using an index template in the start.sh script.
#
# The following settings have been removed and will be applied via template:
# - index.number_of_shards
# - index.number_of_replicas
# - index.merge.scheduler.max_thread_count
@ -71,5 +67,5 @@ bootstrap.system_call_filter: false
# - index.merge.policy.max_merge_at_once
# - index.merge.policy.segments_per_tier
# Set processors based on container configuration
processors: ${PROCESSORS:1}
# The 'processors' setting has been removed as it's no longer supported in Elasticsearch 8.x
# processors: ${PROCESSORS:1}

View File

@ -127,6 +127,36 @@ configure_elasticsearch() {
chown -R elasticsearch:elasticsearch $ES_PATH_CONF
fi
# CRITICAL FIX: Remove any index-level settings from elasticsearch.yml to prevent startup failure
if [ -f $ES_PATH_CONF/elasticsearch.yml ]; then
echo "Checking elasticsearch.yml for index-level settings..."
# Create a temporary file
TEMP_FILE=$(mktemp)
# Filter out any index.* settings
grep -v "^index\." $ES_PATH_CONF/elasticsearch.yml > $TEMP_FILE
# Also remove other known problematic settings for 8.x
grep -v "^processors:" $TEMP_FILE > $TEMP_FILE.2 && mv $TEMP_FILE.2 $TEMP_FILE
grep -v "^bootstrap.system_call_filter:" $TEMP_FILE > $TEMP_FILE.2 && mv $TEMP_FILE.2 $TEMP_FILE
# Add warning comment
echo "" >> $TEMP_FILE
echo "# NOTE: The following settings have been removed from this file:" >> $TEMP_FILE
echo "# - All index.* settings (applied via index templates)" >> $TEMP_FILE
echo "# - processors setting (no longer supported in 8.x)" >> $TEMP_FILE
echo "# - bootstrap.system_call_filter (no longer supported in 8.x)" >> $TEMP_FILE
echo "# See the create_index_template function in start.sh for details" >> $TEMP_FILE
# Replace the original file
cat $TEMP_FILE > $ES_PATH_CONF/elasticsearch.yml
rm $TEMP_FILE
# Ensure proper ownership
chown elasticsearch:elasticsearch $ES_PATH_CONF/elasticsearch.yml
echo "Cleaned elasticsearch.yml configuration file"
fi
# Update JVM options for GC logs
if [ -f $ES_PATH_CONF/jvm.options ]; then
echo "Updating JVM options..."
@ -189,9 +219,9 @@ create_index_template() {
echo "Creating default index template with optimized settings..."
# Wait a moment to ensure Elasticsearch is fully operational
sleep 5
sleep 10
# Define the template JSON
# Define the template JSON with all the index settings that were previously in elasticsearch.yml
template_json=$(cat <<EOF
{
"index_patterns": ["*"],
@ -219,17 +249,36 @@ create_index_template() {
EOF
)
# Apply the template
curl -s -X PUT "http://localhost:9200/_index_template/cloudron_defaults" \
-H "Content-Type: application/json" \
-u "elastic:$ELASTIC_PASSWORD" \
-d "$template_json" > /dev/null
if [ $? -eq 0 ]; then
echo "Index template created successfully."
else
echo "Warning: Failed to create index template. Default settings may not be applied to new indices."
fi
# Try multiple times in case Elasticsearch is still initializing
for i in {1..5}; do
echo "Attempt $i to create index template..."
# Apply the template
response=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:9200/_index_template/cloudron_defaults" \
-H "Content-Type: application/json" \
-u "elastic:$ELASTIC_PASSWORD" \
-d "$template_json")
http_code=$(echo "$response" | tail -n1)
response_body=$(echo "$response" | sed '$d')
if [ "$http_code" = "200" ] || [ "$http_code" = "201" ]; then
echo "✅ Index template created successfully with HTTP code $http_code"
echo "Response: $response_body"
return 0
else
echo "⚠️ Failed to create index template on attempt $i. HTTP code: $http_code"
echo "Response: $response_body"
sleep 5
fi
done
echo "⚠️ Warning: Failed to create index template after multiple attempts."
echo "Default settings may not be applied to new indices, but Elasticsearch will still function."
echo "You can manually create the template later using Elasticsearch API."
# Don't fail the startup process if template creation fails
return 0
}
# Set system limits - be more tolerant of container restrictions
@ -303,7 +352,7 @@ start_elasticsearch() {
echo "Waiting for Elasticsearch to start..."
attempts=0
max_attempts=60
until $(curl --output /dev/null --silent --head --fail http://localhost:9200); do
until $(curl --output /dev/null --silent --head --fail -u "elastic:$ELASTIC_PASSWORD" http://localhost:9200); do
if ! ps -p $(cat /app/data/run/elasticsearch.pid 2>/dev/null) > /dev/null 2>&1; then
echo "ERROR: Elasticsearch process is not running. Logs:"
cat /app/data/logs/*.log
@ -327,6 +376,7 @@ start_elasticsearch() {
echo "y" | ES_JAVA_HOME=/app/data/jdk bin/elasticsearch-reset-password -u elastic -b -p "$ELASTIC_PASSWORD" --url "http://localhost:9200" || true
# Create index template with the settings we removed from elasticsearch.yml
echo "Applying index templates with settings removed from elasticsearch.yml..."
create_index_template
# Create credentials file