Add elk stack image build instructions #3
Merged
amalka.subasinghe
merged 4 commits from pasindu/entgra-filebeat:RemoveJQUsage
into master
4 months ago
@ -1,12 +0,0 @@
|
||||
FROM docker.elastic.co/beats/filebeat:8.2.0
|
||||
|
||||
# Switch to root user
|
||||
USER root
|
||||
|
||||
#install jq to the container
|
||||
RUN apt-get update && apt-get install -y jq
|
||||
|
||||
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
@ -1,12 +1,3 @@
|
||||
## Instructions
|
||||
|
||||
1. Pull the filebeat image
|
||||
```bash
|
||||
docker pull docker.elastic.co/beats/filebeat:8.2.0
|
||||
```
|
||||
Note: Change the filebeat image name or tag in Dockerfile related to the pulled version.
|
||||
|
||||
3. Build the Docker image
|
||||
```bash
|
||||
docker build -t filebeat:8.2.0-entgra-v1 .
|
||||
```
|
||||
Note: cd to the exact directory and build the images.
|
||||
|
@ -0,0 +1,21 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
FROM docker.elastic.co/elasticsearch/elasticsearch:8.2.0
|
||||
|
||||
RUN rm -Rf /usr/share/elasticsearch/config/elasticsearch.yml
|
||||
|
||||
COPY elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml
|
@ -0,0 +1,10 @@
|
||||
## Instructions
|
||||
|
||||
1. Build the Docker image
|
||||
```bash
|
||||
docker build -t registry.entgra.io/entgra-elasticsearch:8.2.0-entgra-v2 -f Dockerfile .
|
||||
```
|
||||
|
||||
2. docker-compose up -d
|
||||
3. docker exec -it $(docker ps -aq -n 1) /bin/bash
|
||||
4. docker-compose down
|
@ -0,0 +1,42 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
elasticsearch:
|
||||
image: elasticsearch:8.2.0-entgra-v2
|
||||
container_name: elasticsearch
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Asia/Colombo
|
||||
- discovery.type=single-node
|
||||
- xpack.security.enabled=false
|
||||
- bootstrap.memory_lock=true
|
||||
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
|
||||
volumes:
|
||||
- ./files/data:/usr/share/elasticsearch/data
|
||||
- ./files/backup:/usr/share/elasticsearch/backup
|
||||
# - ./files/configs:/usr/share/elasticsearch/config
|
||||
- ./files/logs:/usr/share/elasticsearch/logs
|
||||
ports:
|
||||
- "9200:9200"
|
||||
healthcheck:
|
||||
test: curl --fail http://localhost:9200/ || exit 1
|
||||
interval: 60s
|
||||
retries: 10
|
||||
start_period: 30s
|
||||
timeout: 10s
|
@ -0,0 +1,24 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
cluster.name: "docker-cluster"
|
||||
network.host: 0.0.0.0
|
||||
|
||||
# minimum_master_nodes need to be explicitly set when bound on a public IP
|
||||
# # set to 1 to allow single node clusters
|
||||
# # Details: https://github.com/elastic/elasticsearch/pull/17288
|
||||
# discovery.zen.minimum_master_nodes: 1
|
||||
path.repo: ["/usr/share/elasticsearch/backup"]
|
@ -0,0 +1,29 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
FROM docker.elastic.co/beats/filebeat:8.2.0
|
||||
|
||||
# Switch to root user
|
||||
USER root
|
||||
|
||||
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||
|
||||
# Set the entry point to your custom script using tini
|
||||
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/entrypoint.sh"]
|
||||
|
||||
# Set the CMD to pass the environment argument to Filebeat
|
||||
CMD ["-environment", "container"]
|
@ -0,0 +1,11 @@
|
||||
## Instructions
|
||||
|
||||
1. Build the Docker image
|
||||
```bash
|
||||
docker build -t registry.entgra.io/entgra-filebeat:8.2.0-entgra-v2 -f Dockerfile .
|
||||
```
|
||||
|
||||
2. docker-compose up -d
|
||||
3. docker exec -it $(docker ps -aq -n 1) /bin/bash
|
||||
4. docker-compose down
|
||||
|
@ -0,0 +1,33 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
entgra-filebeat:
|
||||
image: filebeat:8.2.0-entgra-v2
|
||||
container_name: entgra-filebeat
|
||||
restart: unless-stopped
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- ./files/iots/logs/:/opt/logs
|
||||
- ./files/filebeat/:/opt/filebeat-configs
|
||||
command: ["--strict.perms=false"]
|
||||
environment:
|
||||
- TZ=Asia/Colombo
|
||||
- LOGSTASH_HOST=logstash
|
||||
- LOGSTASH_PORT=5044
|
@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# Check if ECS_CONTAINER_METADATA_FILE is set
|
||||
if [ -z "$ECS_CONTAINER_METADATA_FILE" ]; then
|
||||
echo "ECS_CONTAINER_METADATA_FILE is not set or the server is running on local deployment environment"
|
||||
fi
|
||||
|
||||
# Extract HostPrivateIPv4Address from the metadata file
|
||||
HOST_PRIVATE_IP=$(cat $ECS_CONTAINER_METADATA_FILE | grep -oP '(?<=HostPrivateIPv4Address": ")[^"]+')
|
||||
|
||||
if [ -n "$HOST_PRIVATE_IP" ]; then
|
||||
echo "Host Private IP: $HOST_PRIVATE_IP"
|
||||
|
||||
# Define the input template file and output file
|
||||
TEMPLATE_FILE="filebeat.template.yml"
|
||||
OUTPUT_FILE="filebeat.yml"
|
||||
|
||||
mkdir -p /opt/filebeat-configs/${HOST_PRIVATE_IP}
|
||||
cp /opt/filebeat-configs/$TEMPLATE_FILE /opt/filebeat-configs/${HOST_PRIVATE_IP}/$OUTPUT_FILE
|
||||
|
||||
# Replace the placeholder with the actual node name and write to the output file
|
||||
sed -i 's/${HOST_PRIVATE_IP}/'$HOST_PRIVATE_IP'/g' /opt/filebeat-configs/${HOST_PRIVATE_IP}/$OUTPUT_FILE
|
||||
sed -i 's/${LOGSTASH_HOST}/'$LOGSTASH_HOST'/g' /opt/filebeat-configs/${HOST_PRIVATE_IP}/$OUTPUT_FILE
|
||||
sed -i 's/${LOGSTASH_PORT}/'$LOGSTASH_PORT'/g' /opt/filebeat-configs/${HOST_PRIVATE_IP}/$OUTPUT_FILE
|
||||
|
||||
echo "Filebeat configuration file created: $OUTPUT_FILE"
|
||||
|
||||
# Create symlinks
|
||||
rm -rf /usr/share/filebeat/elk
|
||||
ln -sf "/opt/logs/${HOST_PRIVATE_IP}/elk" /usr/share/filebeat/elk
|
||||
ln -sf "/opt/filebeat-configs/${HOST_PRIVATE_IP}/filebeat.yml" /usr/share/filebeat/filebeat.yml
|
||||
else
|
||||
echo "HostPrivateIPv4Address not found"
|
||||
fi
|
||||
|
||||
# Execute the original Filebeat entry point with passed arguments
|
||||
exec /usr/local/bin/docker-entrypoint "$@"
|
@ -0,0 +1,35 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
filebeat.inputs:
|
||||
- type: log
|
||||
enabled: true
|
||||
tags: ["SwitchGearLogs"]
|
||||
paths:
|
||||
- /usr/share/filebeat/elk/switchgear.log
|
||||
exclude_files: [".gz$"]
|
||||
exclude_lines: ["^.*TRACE.*$"]
|
||||
|
||||
output.logstash:
|
||||
hosts: ["${LOGSTASH_HOST}:${LOGSTASH_PORT}"]
|
||||
|
||||
processors:
|
||||
- add_docker_metadata:
|
||||
host: "unix:///host_docker/docker.sock"
|
||||
- add_fields:
|
||||
target: ""
|
||||
fields:
|
||||
node.name: "${HOST_PRIVATE_IP}" #custom node name
|
@ -0,0 +1,19 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
FROM docker.elastic.co/kibana/kibana:8.2.0
|
||||
|
||||
COPY kibana.yml /usr/share/kibana/kibana.yml
|
@ -0,0 +1,11 @@
|
||||
## Instructions
|
||||
|
||||
1. Build the Docker image
|
||||
```bash
|
||||
docker build -t registry.entgra.io/entgra-kibana:8.2.0-entgra-v2 -f Dockerfile .
|
||||
```
|
||||
|
||||
2. docker-compose up -d
|
||||
3. docker exec -it $(docker ps -aq -n 1) /bin/bash
|
||||
4. docker-compose down
|
||||
|
@ -0,0 +1,31 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
security.showInsecureClusterWarning: false
|
||||
monitoring.ui.container.elasticsearch.enabled: true
|
||||
logging.quiet: true
|
||||
logging.verbose: false
|
||||
|
||||
logging:
|
||||
appenders:
|
||||
rolling-file:
|
||||
type: rolling-file
|
||||
fileName: /var/logs/kibana/kibana.log
|
||||
policy:
|
||||
type: size-limit
|
||||
size: 10mb
|
||||
layout:
|
||||
type: pattern
|
@ -0,0 +1,19 @@
|
||||
# Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
#
|
||||
# Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
# Version 2.0 (the "License"); you may not use this file except
|
||||
# in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
FROM docker.elastic.co/logstash/logstash:8.2.0
|
||||
|
||||
COPY logstash.conf /usr/share/logstash/pipeline/logstash.conf
|
@ -0,0 +1,11 @@
|
||||
## Instructions
|
||||
|
||||
1. Build the Docker image
|
||||
```bash
|
||||
docker build -t registry.entgra.io/entgra-logstash:8.2.0-entgra-v2 -f Dockerfile .
|
||||
```
|
||||
|
||||
2. docker-compose up -d
|
||||
3. docker exec -it $(docker ps -aq -n 1) /bin/bash
|
||||
4. docker-compose down
|
||||
|
@ -0,0 +1,39 @@
|
||||
input {
|
||||
beats {
|
||||
port => 5044
|
||||
}
|
||||
}
|
||||
filter {
|
||||
|
||||
grok {
|
||||
match => {
|
||||
"message" => "\[%{GREEDYDATA:LogLevel}]\ \[%{TIMESTAMP_ISO8601:logdate}\] \[%{DATA:EventCategory}\] \[%{DATA:InitiatedBy}\] \[%{DATA:SgId}\] \[%{DATA:CbSerial}\] \[%{DATA:OcSerial}\] \[%{DATA:IpAddress}\] \[%{DATA:State}\] - %{GREEDYDATA:Description}"
|
||||
}
|
||||
}
|
||||
|
||||
if [log][file][path] =~ "/var/log/auth.log" {
|
||||
drop { }
|
||||
}
|
||||
if [fileset][name] =~ "syslog" {
|
||||
drop { }
|
||||
}
|
||||
date {
|
||||
match => [ "logdate", "MMM D, YYYY @ HH:mm:ss.SSS", "ISO8601"]
|
||||
target => "@timestamp"
|
||||
}
|
||||
}
|
||||
output {
|
||||
|
||||
if "SwitchGearLogs" in [tags] {
|
||||
elasticsearch {
|
||||
hosts => ["elasticsearch:9200"]
|
||||
index => "switchgearlogs-%{+YYYY.MM.dd}"
|
||||
}
|
||||
}
|
||||
|
||||
# elasticsearch{
|
||||
# hosts => ["elasticsearch:9200"]
|
||||
# index => "lecologs-%{+YYYY.MM.dd}"
|
||||
# }
|
||||
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Path to the ECS metadata file
|
||||
METADATA_FILE=$(cat "$ECS_CONTAINER_METADATA_FILE")
|
||||
|
||||
if [ -f "$METADATA_FILE" ]; then
|
||||
# Extract HostPrivateIPv4Address from the metadata file
|
||||
HOST_PRIVATE_IP=$(jq -r '.HostPrivateIPv4Address' < "$METADATA_FILE")
|
||||
if [ "$HOST_PRIVATE_IP" != "null" ]; then
|
||||
echo "Host Private IP: $HOST_PRIVATE_IP"
|
||||
export HOST_PRIVATE_IP
|
||||
|
||||
# Define the input template file and output file
|
||||
TEMPLATE_FILE="filebeat.template.yml"
|
||||
OUTPUT_FILE="filebeat.yml"
|
||||
|
||||
mkdir -p /opt/filebeat-configs/${HOST_PRIVATE_IP}
|
||||
|
||||
# Replace the placeholder with the actual node name and write to the output file
|
||||
sed "s/{{HOST_PRIVATE_IP}}/${HOST_PRIVATE_IP}/g" "/opt/filebeat-configs/$TEMPLATE_FILE" > "/opt/filebeat-configs/${HOST_PRIVATE_IP}/$OUTPUT_FILE"
|
||||
echo "Filebeat configuration file created: $OUTPUT_FILE"
|
||||
|
||||
# Create symlinks
|
||||
rm -rf /usr/share/filebeat/elk
|
||||
ln -sf "/opt/logs/${HOST_PRIVATE_IP}/elk" /usr/share/filebeat/elk
|
||||
ln -sf "/opt/filebeat-configs/${HOST_PRIVATE_IP}/filebeat.yml" /usr/share/filebeat/filebeat.yml
|
||||
else
|
||||
echo "HostPrivateIPv4Address not found in metadata file"
|
||||
fi
|
||||
else
|
||||
echo "Metadata file does not exist"
|
||||
fi
|
||||
|
||||
# Run the original filebeat entrypoint
|
||||
exec /usr/bin/tini -- /usr/local/bin/docker-entrypoint "$@"
|
Loading…
Reference in new issue