blob: b5ef2c644d0adb4bc45a7e926433a7e53c44419f [file] [log] [blame]
#!/bin/bash
# Copyright 2021 Xoriant Corporation
#
# Licensed 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.
#
# Script to build ves project and its dependent containers
# Maintainer shrinivas.joshi@xoriant.com
# List of containers for this project
# ves-kafka -- kafka broker to store events recieved from collectd or other similar services
# ves-agent -- read events forom kafka and send those events to VEL port on ves-collector container
# ves-collector -- Read the event received from ves-agent and write it to influxdb
# grafana -- Read the events written by ves-collector in influxdb and show the graphs on UI
# influxdb -- Store the events in DB sent by ves-agent
# kafdrop -- UI for Kafka
# Stop all containers if those are running accedently.
./ves-stop.sh
# Port allotment on host system for the micro services running in docker.
influx_port=3330
grafana_port=8880
kafka_port=9092
kafdrop_port=9000
zookeeper_port=2181
vel_ves_port=9999
OS=`uname -s`
# Check Docker, collectd, ip and git is installed on the VM
if ! which docker > /dev/null; then
echo -e "Docker not found, please install docker from https://docs.docker.com/engine/install/ubuntu\n"
exit;
fi
if ! which collectd > /dev/null; then
if [ $OS = 'Darwin' ]
then
echo -e "Collectd not found, please install collectd using brew install collectd\n"
elif [ $OS = 'Linux' ]
then
echo -e "Collectd not found, please install collectd using sudo apt-get install -y collectd\n"
else
echo -e "Could not determine kind of system. Collectd not found, please install collectd using whatever method works.\n"
fi
exit;
fi
if ! which ip > /dev/null; then
if [ $OS = 'Darwin' ]
then
echo -e "ip not found, please install ip using brew install ip.\n"
elif [ $OS = 'Linux' ]
then
echo -e "/sbin/ip not found, please install ip using sudo apt-get install ip.\n"
else
echo -e "Could not determine kind of system. ip not found, please install ip using whatever method works.\n"
exit 1
fi
exit;
fi
clear
#get local ip address of VM from first interface
if [ $OS = 'Darwin' ]
then
local_ip=`ip -4 addr list | grep en11 | grep inet | awk '{print $2}' | cut -d/ -f1`
elif [ $OS = 'Linux' ]
then
local_ip=`/sbin/ip -o -4 addr list | grep enp | head -n 1 | awk '{print $4}' | cut -d/ -f1`
else
echo -e "Could not determine which OS this.\n"
exit 1
fi
echo -e "Binding VES Services to local ip address $local_ip \n "
echo ""
echo -e "--------------------------------------------------------------------\n"
#Spin influx DB
echo -e "Starting influxdb container on Local Port Number $influx_port. Please wait..\n"
docker run -d -p $influx_port:8086 -v $PWD/influxdb influxdb:1.8.5
if [ $? != 0 ]
then
exit 1
fi
sleep 5 #Give some time to spin the container and bring service up
echo "Done."
echo""
echo -e "--------------------------------------------------------------------\n"
#Spin Grafana Cotainer
echo -e "Starting Grafana cotainer on Local port number $grafana_port. Please wait..\n"
docker run -d -p $grafana_port:3000 grafana/grafana
if [ $? != 0 ]
then
exit 1
fi
sleep 5 #Give some time to spin the container and bring service up
echo "Done."
echo ""
echo -e "--------------------------------------------------------------------\n"
#Spin zookeeper container
echo -e "Starting zookeeper container on Local port number $zookeeper_port. Please wait..\n"
docker run -d --add-host mykafka:$local_ip --add-host myzoo:$local_ip \
-p $zookeeper_port:2181 -p 2888:2888 -p 3888:3888 \
-p 8800:8080 zookeeper
if [ $? != 0 ]
then
exit 1
fi
sleep 5
echo "Done."
echo ""
echo -e "--------------------------------------------------------------------\n"
#Spin Kafka container.
echo -e "Starting Kafka container on Local port number $kafka_port. Please wait..\n"
docker run -d --add-host mykafka:$local_ip -e zookeeper_host=$local_ip \
-e zookeeper_hostname='myzoo' -e zookeeper_port=$zookeeper_port \
-e kafka_hostname='mykafka' -e kafka_port=$kafka_port \
-p $kafka_port:$kafka_port ves-kafka
if [ $? != 0 ]
then
exit 1
fi
sleep 7
echo "Done."
echo ""
echo -e "--------------------------------------------------------------------\n"
#Spin Kafdrop UI container (this is optional componant)
echo -e "Starting kafdrop UI container on Local port numner $kafdrop_port. please wait..\n"
docker run -d --add-host mykafka:$local_ip -p $kafdrop_port:9000 \
-e KAFKA_BROKERCONNECT=$local_ip:$kafka_port \
-e JVM_OPTS="-Xms64M -Xmx128M" obsidiandynamics/kafdrop:latest
if [ $? != 0 ]
then
exit 1
fi
sleep 5
echo "Done."
echo ""
echo -e "--------------------------------------------------------------------\n"
# Spin ves-collector container.
echo -e "Starting ves collector container on Local port number $vel_ves_port. Please wait\n"
docker run -d -e ves_influxdb_host=$local_ip \
-e ves_influxdb_port=$influx_port -e ves_grafana_host=$local_ip \
-e ves_grafana_port=$grafana_port -e ves_host='localhost' \
-e ves_port=$vel_ves_port -e ves_grafana_auth='admin:admin' \
-e ves_user='user' -e ves_pass='password' -e ves_path=''\
-e ves_topic='events' -e ves_loglevel='DEBUG' \
-p $vel_ves_port:$vel_ves_port ves-collector
if [ $? != 0 ]
then
exit 1
fi
sleep 6
echo "Done."
echo ""
echo -e "--------------------------------------------------------------------\n"
#Spin ves agent container.
echo -e "Starting ves agent container. Please wait\n"
docker run -d -e ves_kafka_host=$local_ip \
-e ves_kafka_hostname='mykafka' -e ves_host=$local_ip \
-e ves_port=$vel_ves_port -e ves_path='' \
-e ves_topic='events' -e ves_https='False' -e ves_user='user' \
-e ves_pass='password' -e ves_interval='10' \
-e ves_kafka_port=$kafka_port -e ves_mode='./yaml/host' \
-e ves_version='7' -e ves_loglevel='DEBUG' ves-agent
if [ $? != 0 ]
then
exit 1
fi
sleep 5
echo "Done."
echo ""
echo -e "--------------------------------------------------------------------\n"
echo""
echo -e "ves stack summary\n"
echo -e "===================================================================================================================\n"
echo ""
echo -e "Kafka port: $kafka_port \n"
echo -e "Kafdrop port: $kafdrop_port \n"
echo -e "ves collector listner port: $vel_ves_port \n"
echo -e "Grafana port: $grafana_port \n"
echo -e "To access kafdrop UI use http://$local_ip:$kafdrop_port from your web browser. \n"
echo -e "To access grafana dashboard paste url http://$local_ip:$grafana_port in web browser. "
echo -e "Grafana username/password is admin/admin *** DO NOT CHANGE THE ADMIN PASSWORD, CLICK SKIP OPTION ***\n"
echo ""
echo -e "===================================================================================================================\n"