Increase ES,LS heap size added Metricbeat setup 57/1557/10
authorAMIT M <am00474504@techmahindra.com>
Thu, 5 Apr 2018 14:35:36 +0000 (20:05 +0530)
committerAMIT M <am00474504@techmahindra.com>
Fri, 4 May 2018 17:53:43 +0000 (23:23 +0530)
Both Elasticsearch (Port:9200) and Logstash (Port:5000) services needs to
be accessed from outside the ELK server namely application server where
all the agents like filebeets and metricbeets are running.
Metricbeat is to monitor the acumos platform host machine, it collects metrics of CPU, Memory, docker container information of
acumos platform.

Issue-ID: ACUMOS-516

Change-Id: Icb922cc14fb20123364b757bca5633540c8f24ba
Signed-off-by: AMIT M <am00474504@techmahindra.com>
docs/user-guide.rst
elk-stack/acumos-elk-env.sh [new file with mode: 0644]
elk-stack/docker-compose-elk.sh [new file with mode: 0644]
elk-stack/docker-compose.yml
elk-stack/elasticsearch/config/elasticsearch.yml
metricbeat/Dockerfile [new file with mode: 0644]
metricbeat/config/metricbeat.yml [new file with mode: 0644]
metricbeat/module.d/docker.yml [new file with mode: 0644]
metricbeat/module.d/system.yml [new file with mode: 0644]
metricbeat/pom.xml [new file with mode: 0644]

index dea6c38..206a8a0 100644 (file)
@@ -67,26 +67,32 @@ Steps
 
    $ git clone https://gerrit.acumos.org/r/platform-oam
 
+2. Create docker volume namely acumos-esdata
+   
+.. code:: bash
+
+   $ docker volume create acumos-esdata
+
 
-2. The docker-compose.yaml file as well as component directories are located in the elk-stack directory. Each component has a Dockerfile. You need to build the docker-compose file if you are using it for the first time or if you have made changed any Dockerfile or the contents of its build directory.
+3. The docker-compose.yaml file as well as component directories are located in the elk-stack directory. Each component has a Dockerfile. You need to build the docker-compose file if you are using it for the first time or if you have made changed any Dockerfile or the contents of its build directory.
 
 .. code:: bash
 
-   $ docker-compose build
+   $ ./docker-compose-elk.sh build
 
 
-3. Builds, (re)creates, starts, and attaches to containers for Elasticsearch, Logstash, Kibana
+4. Builds, (re)creates, starts, and attaches to containers for Elasticsearch, Logstash, Kibana
 
 .. code:: bash
 
-   $ docker-compose up -d
+   $ ./docker-compose-elk.sh up -d
 
 
-4. To stop the running containers without removing them
+5. To stop the running containers without removing them
 
 .. code:: bash
 
-   $ docker-compose stop
+   $ ./docker-compose-elk.sh stop
 
 
 Filebeat setup steps:
diff --git a/elk-stack/acumos-elk-env.sh b/elk-stack/acumos-elk-env.sh
new file mode 100644 (file)
index 0000000..7716a96
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash
+# ===============LICENSE_START=======================================================
+# Acumos Apache-2.0
+# ===================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
+# ===================================================================================
+# This Acumos software file is distributed by AT&T and Tech Mahindra
+# 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
+#
+# This file 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.
+# ===============LICENSE_END=========================================================
+#
+# What this is: Environment file for Acumos Kong API installation.
+# Usage:
+# - Intended to be called from docker-compose.yml
+#
+
+# Be verbose
+set -x
+
+export ACUMOS_ELK_ELASTICSEARCH_PORT=9200
+export ACUMOS_ELK_NODE_PORT=9300
+export ACUMOS_ELK_LOGSTASH_PORT=5000
+export ACUMOS_ELK_KIBANA_PORT=5601
+
+# Java heap size
+export ACUMOS_ELK_ES_JAVA_HEAP_MIN_SIZE=1g
+export ACUMOS_ELK_ES_JAVA_HEAP_MAX_SIZE=1g
+export ACUMOS_ELK_LS_JAVA_HEAP_MIN_SIZE=1g
+export ACUMOS_ELK_LS_JAVA_HEAP_MAX_SIZE=1g
diff --git a/elk-stack/docker-compose-elk.sh b/elk-stack/docker-compose-elk.sh
new file mode 100644 (file)
index 0000000..cc69ce4
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/bash
+# ===============LICENSE_START=======================================================
+# Acumos Apache-2.0
+# ===================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
+# ===================================================================================
+# This Acumos software file is distributed by AT&T and Tech Mahindra
+# 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
+#
+# This file 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.
+# ===============LICENSE_END=========================================================
+#
+# What this is:
+# Sets environment variables needed by docker-compose in all-in-one environment
+# then invokes docker-compose with the command-line arguments.
+#
+# Usage:
+# - bash docker-compose.sh [options]
+#   options: optional parameters to docker-compose. some examples:
+#   $ sudo bash docker-compose.sh build
+#     Build all services defined in the docker-compose.yaml file.
+#   $ sudo bash docker-compose.sh up
+#     Start all service containers.
+#   $ sudo bash docker-compose.sh logs -f
+#     Tail the logs of all service containers.
+#   $ sudo bash docker-compose.sh down
+#     Stop all service containers.
+#   $ sudo bash docker-compose.sh rm -v
+#     Remove all service containers.
+#
+source acumos-elk-env.sh
+
+exec docker-compose $*
+
+
index e85604f..6a06ca7 100644 (file)
@@ -21,25 +21,31 @@ services:
 
   elasticsearch:
     build: elasticsearch/
+    container_name: acumos-elasticsearch
     volumes:
       - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
+      - acumos-esdata:/usr/share/elasticsearch/data
     ports:
-      - "9200:9200"
-      - "9300:9300"
+    #Node client default listens at 9200, metricbeat and logstash index data into Elasticsearch using this port.
+     - "${ACUMOS_ELK_ELASTICSEARCH_PORT}:9200"
+    #Transport client default is 9300 this port is used for nodes communication. If this port is not open, your nodes will not be able to form a cluster.
+     - "${ACUMOS_ELK_NODE_PORT}:9300"
     environment:
-      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
+      ES_JAVA_OPTS: "-Xmx${ACUMOS_ELK_ES_JAVA_HEAP_MAX_SIZE} -Xms${ACUMOS_ELK_ES_JAVA_HEAP_MIN_SIZE}"
     networks:
       - elk
 
   logstash:
     build: logstash/
+    container_name: acumos-logstash
     volumes:
       - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
       - ./logstash/pipeline:/usr/share/logstash/pipeline
     ports:
-      - "5000:5000"
+    #Logstash default listens at 5000, Filebeat agentship log to this port.
+      - "${ACUMOS_ELK_LOGSTASH_PORT}:5000"
     environment:
-      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
+      LS_JAVA_OPTS: "-Xmx${ACUMOS_ELK_LS_JAVA_HEAP_MAX_SIZE} -Xms${ACUMOS_ELK_LS_JAVA_HEAP_MIN_SIZE}"
     networks:
       - elk
     depends_on:
@@ -47,20 +53,22 @@ services:
 
   kibana:
     build: kibana/
+    container_name: acumos-kibana
     volumes:
       - ./kibana/config/:/usr/share/kibana/config
     ports:
-      - "5601:5601"
+    #Kiban is accessed on the web browser. Used for visualization of logs.
+      - "${ACUMOS_ELK_KIBANA_PORT}:5601"
     networks:
       - elk
     depends_on:
       - elasticsearch
 
-networks:
 
+networks:
   elk:
     driver: bridge
 
 volumes:
-    acumos-logs:
+    acumos-esdata:
         external: true
index 72b68f3..5afc3f1 100644 (file)
@@ -21,7 +21,7 @@
 #
 cluster.name: "docker-cluster"
 network.host: 0.0.0.0
-
+path.data: /usr/share/elasticsearch/data
 # 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
diff --git a/metricbeat/Dockerfile b/metricbeat/Dockerfile
new file mode 100644 (file)
index 0000000..f2ae89c
--- /dev/null
@@ -0,0 +1,22 @@
+# ===============LICENSE_START=======================================================
+# Acumos Apache-2.0
+# ===================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
+# ===================================================================================
+# This Acumos software file is distributed by AT&T and Tech Mahindra
+# 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
+#
+# This file 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.
+# ===============LICENSE_END=========================================================
+FROM docker.elastic.co/beats/metricbeat:6.2.4
+COPY /config/metricbeat.yml /usr/share/metricbeat/metricbeat.yml
+USER root
+COPY ./module.d /usr/share/metricbeat/modules.d
+RUN chown root /usr/share/metricbeat/metricbeat.yml && chmod go-w /usr/share/metricbeat/metricbeat.yml
diff --git a/metricbeat/config/metricbeat.yml b/metricbeat/config/metricbeat.yml
new file mode 100644 (file)
index 0000000..e61d34d
--- /dev/null
@@ -0,0 +1,146 @@
+# ===============LICENSE_START=======================================================
+# Acumos Apache-2.0
+# ===================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
+# ===================================================================================
+# This Acumos software file is distributed by AT&T and Tech Mahindra
+# 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
+#
+# This file 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.
+# ===============LICENSE_END=========================================================
+
+###################### Metricbeat Configuration Example #######################
+
+# This file is an example configuration file highlighting only the most common
+# options. The metricbeat.full.yml file from the same directory contains all the
+# supported options with more comments. You can use it as a reference.
+#
+# You can find the full configuration reference here:
+# https://www.elastic.co/guide/en/beats/metricbeat/index.html
+
+#==========================  Modules configuration ============================
+metricbeat.config.modules:
+#Modules are enabled by reading the .modules.d sub directory. Changes to these will automatically be detected and reflected.
+  path: ${path.config}/modules.d/*.yml
+  reload.period: 10s
+  reload.enabled: true
+
+metricbeat.modules:
+
+#================================ General =====================================
+
+# The name of the shipper that publishes the network data. It can be used to group
+# all the transactions sent by a single shipper in the web interface.
+  name: ${SHIPPER_NAME:docker}
+
+# The tags of the shipper are included in their own field with each
+# transaction published.
+#tags: [${SHIPPER_TAGS}]
+
+# Optional fields that you can specify to add additional information to the
+# output.
+#fields:
+#  env: staging
+
+#================================ Outputs =====================================
+
+# Configure what outputs to use when sending the data collected by the beat.
+# Multiple outputs may be used.
+
+#================================= Paths ======================================
+# The home path for the metricbeat installation. This is the default base path
+# for all other path settings and for miscellaneous files that come with the
+# distribution (for example, the sample dashboards).
+# If not set by a CLI flag or in the configuration file, the default for the
+# home path is the location of the binary.
+#path.home: /usr/share/metricbeat/kibana/5/dashboard
+#setup.dashboards.enabled: true
+#setup.dashboards.directory: ${path.home}/kibana
+# The configuration path for the metricbeat installation. This is the default
+# base path for configuration files, including the main YAML configuration file
+# and the Elasticsearch template file. If not set by a CLI flag or in the
+# configuration file, the default for the configuration path is the home path.
+#path.config: ${path.home}
+
+# The data path for the metricbeat installation. This is the default base path
+# for all the files in which metricbeat needs to store its data. If not set by a
+# CLI flag or in the configuration file, the default for the data path is a data
+# subdirectory inside the home path.
+#path.data: ${path.home}/data
+
+# The logs path for a metricbeat installation. This is the default location for
+# the Beat's log files. If not set by a CLI flag or in the configuration file,
+# the default for the logs path is a logs subdirectory inside the home path.
+#path.logs: ${path.home}/logs
+
+#============================== Dashboards =====================================
+# These settings control loading the sample dashboards to the Kibana index. Loading
+# the dashboards are disabled by default and can be enabled either by setting the
+# options here, or by using the `-setup` CLI flag or the `setup` command.
+setup.dashboards.enabled: true
+
+# The directory from where to read the dashboards. The default is the `kibana`
+# folder in the home path.
+setup.dashboards.directory: ${path.home}/kibana
+# The URL from where to download the dashboards archive. It is used instead of
+# the directory if it has a value.
+#setup.dashboards.url:
+
+# The file archive (zip file) from where to read the dashboards. It is used instead
+# of the directory when it has a value.
+#setup.dashboards.file:
+
+# In case the archive contains the dashboards from multiple Beats, this lets you
+# select which one to load. You can load all the dashboards in the archive by
+# setting this to the empty string.
+#setup.dashboards.beat: metricbeat
+
+# The name of the Kibana index to use for setting the configuration. Default is ".kibana"
+#setup.dashboards.kibana_index: .kibana
+
+# The Elasticsearch index name. This overwrites the index name defined in the
+# dashboards and index pattern. Example: testbeat-*
+#setup.dashboards.index:
+
+# Always use the Kibana API for loading the dashboards instead of autodetecting
+# how to install the dashboards by first querying Elasticsearch.
+#setup.dashboards.always_kibana: false
+
+#=== Template ===
+setup.template.enabled: true
+setup.template.fields: "${path.config}/fields.yml"
+setup.template.name: "metricbeat-%{[beat.version]}"
+setup.template.pattern: "metricbeat-%{[beat.version]}-*"
+index: "metricbeat-%{[beat.version]}-%{+yyyy.MM.dd}"
+
+#-------------------------- Elasticsearch output ------------------------------
+output.elasticsearch:
+
+  enabled: true
+
+  # Array of hosts to connect to.
+  #hosts: ["${HOST:elasticsearch}:${PORT:9200}"]
+  hosts: ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
+
+  # Optional protocol and basic auth credentials.
+  #protocol: "https"
+  #username: "elastic"
+  #password: "changeme"
+
+#================================ Logging =====================================
+
+# Sets log level. The default log level is error.
+# Available log levels are: critical, error, warning, info, debug
+#logging.level: debug
+
+# At debug level, you can selectively enable logging only for some components.
+# To enable all selectors use ["*"]. Examples of other selectors are "beat",
+# "publish", "service".
+#logging.selectors: ["*"]
diff --git a/metricbeat/module.d/docker.yml b/metricbeat/module.d/docker.yml
new file mode 100644 (file)
index 0000000..22f687f
--- /dev/null
@@ -0,0 +1,27 @@
+# ===============LICENSE_START=======================================================
+# Acumos Apache-2.0
+# ===================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
+# ===================================================================================
+# This Acumos software file is distributed by AT&T and Tech Mahindra
+# 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
+#
+# This file 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.
+# ===============LICENSE_END=========================================================
+- module: docker
+  metricsets: ["container", "cpu", "diskio", "healthcheck", "info", "memory", "network"]
+  hosts: ["unix:///var/run/docker.sock"]
+  period: 10s
+
+  # To connect to Docker over TLS you must specify a client and CA certificate.
+  #ssl:
+    #certificate_authority: "/etc/pki/root/ca.pem"
+    #certificate:           "/etc/pki/client/cert.pem"
+    #key:                   "/etc/pki/client/cert.key"
diff --git a/metricbeat/module.d/system.yml b/metricbeat/module.d/system.yml
new file mode 100644 (file)
index 0000000..f455661
--- /dev/null
@@ -0,0 +1,48 @@
+# ===============LICENSE_START=======================================================
+# Acumos Apache-2.0
+# ===================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
+# ===================================================================================
+# This Acumos software file is distributed by AT&T and Tech Mahindra
+# 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
+#
+# This file 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.
+# ===============LICENSE_END=========================================================
+- module: system
+  period: 10s
+  metricsets:
+    - cpu
+    - load
+    - memory
+    - network
+    - process
+    - process_summary
+    #- core
+    #- diskio
+    #- socket
+  processes: ['.*']
+  process.include_top_n:
+    by_cpu: 5      # include top 5 processes by CPU
+    by_memory: 5   # include top 5 processes by memory
+
+- module: system
+  period: 1m
+  metricsets:
+    - filesystem
+    - fsstat
+  processors:
+  - drop_event.when.regexp:
+      system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib)($|/)'
+
+- module: system
+  period: 15m
+  metricsets:
+    - uptime
+
diff --git a/metricbeat/pom.xml b/metricbeat/pom.xml
new file mode 100644 (file)
index 0000000..8b44090
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ===============LICENSE_START=======================================================
+  Acumos Apache-2.0
+  ===================================================================================
+  Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
+  ===================================================================================
+  This Acumos software file is distributed by AT&T and Tech Mahindra
+  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
+  This file 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.
+  ===============LICENSE_END=========================================================
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+        <!-- This file publishes Docker name and tag for the LF Jenkins build script -->
+        <groupId>IGNORED</groupId>
+        <!-- docker image name -->
+        <artifactId>acumos-metricbeat</artifactId>
+        <!-- docker tag -->
+        <version>1.0.0-SNAPSHOT</version>
+</project>
+
+