X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fk8s%2Finstall_osm_k8s_monitoring.sh;fp=installers%2Fk8s%2Finstall_osm_k8s_monitoring.sh;h=4259696a96e93c6be3d5db4e1da0647b926f218f;hb=e366b1a9f5405252757890bcbaa392d269fafad0;hp=0000000000000000000000000000000000000000;hpb=6ad812eafdd40741b596a8aee93dd88e9232a162;p=osm%2Fdevops.git diff --git a/installers/k8s/install_osm_k8s_monitoring.sh b/installers/k8s/install_osm_k8s_monitoring.sh new file mode 100644 index 00000000..4259696a --- /dev/null +++ b/installers/k8s/install_osm_k8s_monitoring.sh @@ -0,0 +1,202 @@ +#!/bin/bash + +# Copyright 2019 Minsait - Indra S.A. +# +# 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. +# Author: Jose Manuel Palacios (jmpalacios@minsait.com) +# Author: Jose Antonio Martinez (jamartinezv@minsait.com) + +# Obtain the path where the script is located +HERE=$(dirname $(readlink -f ${BASH_SOURCE[0]})) + +echo $HERE +# Load component versions to be deployed +source $HERE/versions_monitoring +V_OPERATOR="" +V_MONGODB_EXPORTER="" +V_MYSQL_EXPORTER="" + +V_OPERATOR=$PROMETHEUS_OPERATOR +V_MONGODB_EXPORTER=$PROMETHEUS_MONGODB_EXPORTER +V_MYSQL_EXPORTER=$PROMETHEUS_MYSQL_EXPORTER + + +function usage(){ + echo -e "usage: $0 [OPTIONS]" + echo -e "Install OSM Monitoring" + echo -e " OPTIONS" + echo -e " -n : use specified kubernetes namespace - default: monitoring" + echo -e " -s : service type (ClusterIP|NodePort|LoadBalancer) - default: NodePort" + echo -e " --debug : debug script" + echo -e " --dump : dump arguments and versions" + echo -e " -h / --help : print this help" +} + +NAMESPACE=monitoring +HELM="" +DEBUG="" +DUMP_VARS="" +SERVICE_TYPE="" +while getopts ":h-:n:s:" o; do + case "${o}" in + h) + usage && exit 0 + ;; + n) + NAMESPACE="${OPTARG}" + ;; + + s) + SERVICE_TYPE="${OPTARG}" + ;; + + -) + [ "${OPTARG}" == "help" ] && usage && exit 0 + [ "${OPTARG}" == "debug" ] && DEBUG="y" && continue + [ "${OPTARG}" == "dump" ] && DUMP_VARS="y" && continue + echo -e "Invalid option: '--$OPTARG'\n" >&2 + usage && exit 1 + ;; + + \?) + echo -e "Invalid option: '-$OPTARG'\n" >&2 + usage && exit 1 + ;; + *) + usage && exit 1 + ;; + esac +done + +function dump_vars(){ + echo "Args...." + echo "NAMESPACE=$NAMESPACE" + echo "SERVICE_TYPE=$SERVICE_TYPE" + echo "DEBUG=$DEBUG" + echo "Versions...." + echo "V_OPERATOR=$V_OPERATOR" + echo "V_MONGODB_EXPORTER=$V_MONGODB_EXPORTER" + echo "V_MYSQL_EXPORTER=$V_MYSQL_EXPORTER" +} + +if [ -n "$SERVICE_TYPE" ] ; then + if [ [ $SERVICE_TYPE != "ClusterIP" ] || [ $SERVICE_TYPE != "NodePort" ] || [ $SERVICE_TYPE != "LoadBalancer" ] ] ; then + echo "Wrong service type..." + usage && exit 1 + fi +else + SERVICE_TYPE="NodePort" +fi + +if [ -n "$DEBUG" ] ; then + set -x +fi + +if [ -n "$DUMP_VARS" ] ; then + dump_vars +fi + +# Check if helm is installed +helm > /dev/null 2>&1 +if [ $? != 0 ] ; then + echo "Helm is not installed, installing ....." + curl https://get.helm.sh/helm-v2.15.2-linux-amd64.tar.gz --output helm-v2.15.2.tar.gz + tar -zxvf helm-v2.15.2.tar.gz + sudo mv linux-amd64/helm /usr/local/bin/helm + rm -r linux-amd64 + rm helm-v2.15.2.tar.gz +fi + +echo "Checking if helm-tiller is installed..." +kubectl --namespace kube-system get serviceaccount tiller > /dev/null 2>&1 +if [ $? == 1 ] ; then + # tiller account for kubernetes + kubectl --namespace kube-system create serviceaccount tiller + kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller + # HELM initialization + helm init --service-account tiller + + # Wait for Tiller to be up and running + while true + do + tiller_status=`kubectl -n kube-system get deployment.apps/tiller-deploy --no-headers | awk '{print $2'}` + if [ ! -z "$tiller_status" ] + then + if [ $tiller_status == "1/1" ] + then + echo "Go...." + break + fi + fi + echo "Waiting for tiller READY...." + sleep 2 + done +fi + +# create monitoring namespace +echo "Creating namespace $NAMESPACE" +kubectl create namespace $NAMESPACE + +# Prometheus operator installation +$HERE/change-charts-prometheus-operator.sh +echo "Creating stable/prometheus-operator" +helm install --namespace $NAMESPACE --version=$V_OPERATOR --name osm-monitoring --set kubelet.serviceMonitor.https=true,prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false $HERE/helm_charts/prometheus-operator + +# Change osm-monitoring-grafana-config-dashboards to have folders +kubectl -n $NAMESPACE delete configmap osm-monitoring-grafana-config-dashboards +kubectl -n $NAMESPACE apply -f $HERE/grafanaproviders.yaml + +# Exporters installation + +# MongoDB +# exporter +echo "Creating stable/prometheus-mongodb-exporter" +helm install --namespace $NAMESPACE --version=$V_MONGODB_EXPORTER --name osm-mongodb-exporter --set image.tag='0.10.0',mongodb.uri='mongodb://mongo.osm:27017' stable/prometheus-mongodb-exporter +#dashboard: +kubectl -n $NAMESPACE apply -f $HERE/mongodb-exporter-dashboard.yaml + +# Mysql +# exporter +echo "Creating stable/prometheus-mysql-exporter" +helm install --namespace $NAMESPACE --version=$V_MYSQL_EXPORTER --name osm-mysql-exporter --set serviceMonitor.enabled=true,mysql.user="root",mysql.pass=`kubectl -n osm get secret ro-db-secret -o yaml | grep MYSQL_ROOT_PASSWORD | awk '{print $2}' | base64 -d`,mysql.host="mysql.osm",mysql.port="3306" stable/prometheus-mysql-exporter +#dashboard: +kubectl -n $NAMESPACE apply -f $HERE/mysql-exporter-dashboard.yaml + +# Kafka +# exporter +helm install --namespace $NAMESPACE --name osm-kafka-exporter $HERE/helm_charts/prometheus-kafka-exporter +# dashboard: +kubectl -n $NAMESPACE apply -f $HERE/kafka-exporter-dashboard.yaml + +# Deploy summary dashboard +kubectl -n $NAMESPACE apply -f $HERE/summary-dashboard.yaml + +# Patch prometheus, alertmanager and grafana with service type +# By default is created with ClusterIP type +if [ $SERVICE_TYPE == "NodePort" ] ; then + kubectl --namespace $NAMESPACE patch service osm-monitoring-grafana -p '{"spec":{"type":"NodePort"}}' + kubectl --namespace $NAMESPACE patch service osm-monitoring-prometheus-alertmanager -p '{"spec":{"type":"NodePort"}}' + kubectl --namespace $NAMESPACE patch service osm-monitoring-prometheus-prometheus -p '{"spec":{"type":"NodePort"}}' +fi + +if [ $SERVICE_TYPE == "LoadBalancer" ] ; then + kubectl --namespace $NAMESPACE patch service osm-monitoring-grafana -p '{"spec":{"type":"LoadBalancer"}}' + kubectl --namespace $NAMESPACE patch service osm-monitoring-prometheus-alertmanager -p '{"spec":{"type":"LoadBalancer"}}' + kubectl --namespace $NAMESPACE patch service osm-monitoring-prometheus-prometheus -p '{"spec":{"type":"LoadBalancer"}}' +fi + +# Restart grafana to be sure patches are applied +echo "Restarting grafana POD..." +pod_grafana=`kubectl -n monitoring get pods | grep grafana | awk '{print $1}'` +kubectl --namespace $NAMESPACE delete pod $pod_grafana +