3 # Copyright 2019 Minsait - Indra S.A.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 # Author: Jose Manuel Palacios (jmpalacios@minsait.com)
17 # Author: Jose Antonio Martinez (jamartinezv@minsait.com)
19 # Obtain the path where the script is located
20 HERE
=$
(dirname $
(readlink
-f ${BASH_SOURCE[0]}))
23 # Load component versions to be deployed
24 source $HERE/versions_monitoring
30 V_OPERATOR
=$PROMETHEUS_OPERATOR
31 V_MONGODB_EXPORTER
=$PROMETHEUS_MONGODB_EXPORTER
32 V_MYSQL_EXPORTER
=$PROMETHEUS_MYSQL_EXPORTER
33 V_KAFKA_EXPORTER
=$PROMETHEUS_KAFKA_EXPORTER
37 echo -e "usage: $0 [OPTIONS]"
38 echo -e "Install OSM Monitoring"
40 echo -e " -n <namespace> : namespace to deploy k8s cluster monitoring - default: monitoring"
41 echo -e " -o <osm_namespace> : namespace where OSM is installed - default: osm"
42 echo -e " -s <service_type>: service type (ClusterIP|NodePort|LoadBalancer) - default: NodePort"
43 echo -e " --debug : debug script"
44 echo -e " --dump : dump arguments and versions"
45 echo -e " -h / --help : print this help"
54 while getopts ":h-:n:o:s:" o
; do
63 OSM_NAMESPACE
="${OPTARG}"
66 SERVICE_TYPE
="${OPTARG}"
69 [ "${OPTARG}" == "help" ] && usage
&& exit 0
70 [ "${OPTARG}" == "debug" ] && DEBUG
="y" && continue
71 [ "${OPTARG}" == "dump" ] && DUMP_VARS
="y" && continue
72 echo -e "Invalid option: '--$OPTARG'\n" >&2
77 echo -e "Invalid option: '-$OPTARG'\n" >&2
88 echo "NAMESPACE=$NAMESPACE"
89 echo "OSM_NAMESPACE=$OSM_NAMESPACE"
90 echo "SERVICE_TYPE=$SERVICE_TYPE"
93 echo "V_OPERATOR=$V_OPERATOR"
94 echo "V_MONGODB_EXPORTER=$V_MONGODB_EXPORTER"
95 echo "V_MYSQL_EXPORTER=$V_MYSQL_EXPORTER"
96 echo "V_KAFKA_EXPORTER=$V_KAFKA_EXPORTER"
100 kubernetes_version
=`kubectl version --short | grep Server | awk '{print $3}'`
101 min_kubernetes_version
="v1.16.0"
102 if [[ "$kubernetes_version" < "$min_kubernetes_version" ]]
104 echo "K8s monitoring could not be installed: Kube-prometheus-stack requires a Kubernetes 1.16+ (current version: $kubernetes_version)"
108 if [ -n "$SERVICE_TYPE" ] ; then
109 if [ [ $SERVICE_TYPE != "ClusterIP" ] ||
[ $SERVICE_TYPE != "NodePort" ] ||
[ $SERVICE_TYPE != "LoadBalancer" ] ] ; then
110 echo "Wrong service type..."
114 SERVICE_TYPE
="NodePort"
117 if [ -n "$DEBUG" ] ; then
121 if [ -n "$DUMP_VARS" ] ; then
125 # Create monitoring namespace
126 echo "Creating namespace $NAMESPACE"
127 kubectl create namespace
$NAMESPACE
129 # Needed changes for Kube-Prometheus on Kubeadm installation
130 # Kube-Controller-Manager
131 sudo
sed -e "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/" -i /etc
/kubernetes
/manifests
/kube-controller-manager.yaml
133 sudo
sed -e "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/" -i /etc
/kubernetes
/manifests
/kube-scheduler.yaml
135 kubectl
-n kube-system get cm
/kube-proxy
-o yaml
> $HERE/kube-proxy-cm.yaml
136 sed -e "s/metricsBindAddress: \"\"/metricsBindAddress: 0.0.0.0:10249/" -i $HERE/kube-proxy-cm.yaml
137 kubectl
-n kube-system delete cm kube-proxy
138 kubectl
-n kube-system apply
-f $HERE/kube-proxy-cm.yaml
139 rm $HERE/kube-proxy-cm.yaml
140 kubectl delete pod
-l k8s-app
=kube-proxy
-n kube-system
142 sudo
cp /etc
/kubernetes
/pki
/etcd
/healthcheck-client.key
$HERE/healthcheck-client.key
143 sudo
chmod a
+r
$HERE/healthcheck-client.key
144 kubectl
-n $NAMESPACE create secret generic etcd-client-cert
--from-file=/etc
/kubernetes
/pki
/etcd
/ca.crt
--from-file=/etc
/kubernetes
/pki
/etcd
/healthcheck-client.crt
--from-file=$HERE/healthcheck-client.key
145 sudo
awk '/--trusted-ca-file=\/etc\/kubernetes\/pki\/etcd\/ca.crt/ { print; print " - --metrics=extensive"; next }1' /etc
/kubernetes
/manifests
/etcd.yaml
> $HERE/tmp
&& sudo
mv $HERE/tmp
/etc
/kubernetes
/manifests
/etcd.yaml
146 sudo chown root
:root
/etc
/kubernetes
/manifests
/etcd.yaml
147 sudo
chmod 600 /etc
/kubernetes
/manifests
/etcd.yaml
149 # Add Helm prometheus-community repo
150 helm repo add prometheus-community https
://prometheus-community.github.io
/helm-charts
153 # kube-prometheus-stack installation (previously called prometheus-operator)
154 $HERE/change-charts-prometheus-operator.sh
155 echo "Creating stable/kube-prometheus-stack"
156 cat > $HERE/kube-prometheus-stack-values.yaml
<<EOF
157 kubeControllerManager:
164 insecureSkipVerify: true
172 insecureSkipVerify: true
179 insecureSkipVerify: false
180 serverName: localhost
181 caFile: /etc/prometheus/secrets/etcd-client-cert/ca.crt
182 certFile: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.crt
183 keyFile: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.key
189 forceDeployDashboards: true
194 serviceMonitorSelectorNilUsesHelmValues: false
195 secrets: ['etcd-client-cert']
197 helm
install osm-monitoring
--namespace $NAMESPACE --version=$V_OPERATOR -f $HERE/kube-prometheus-stack-values.yaml
$HERE/helm_charts
/kube-prometheus-stack
199 # Exporters installation
202 echo "Creating prometheus-community/prometheus-mongodb-exporter"
203 helm
install osm-mongodb-exporter
--namespace $NAMESPACE --version=$V_MONGODB_EXPORTER --set serviceMonitor.additionalLabels.release
=osm-monitoring
,mongodb.uri
='mongodb://mongodb-k8s.osm:27017' prometheus-community
/prometheus-mongodb-exporter
205 kubectl
-n $NAMESPACE apply
-f $HERE/mongodb-exporter-dashboard.yaml
208 echo "Creating prometheus-community/prometheus-mysql-exporter"
209 helm
install osm-mysql-exporter
--namespace $NAMESPACE --version=$V_MYSQL_EXPORTER --set serviceMonitor.enabled
=true
,serviceMonitor.additionalLabels.release
=osm-monitoring
,mysql.user
="root",mysql.pass
=`kubectl -n ${OSM_NAMESPACE} get secret ro-db-secret -o yaml | grep -i -A1 '^data:$' | grep MYSQL_ROOT_PASSWORD | awk '{print $2}' | base64 -d`,mysql.
host="mysql.osm",mysql.port
="3306",'collectors.info_schema\.tables=true' prometheus-community
/prometheus-mysql-exporter
211 kubectl
-n $NAMESPACE apply
-f $HERE/mysql-exporter-dashboard.yaml
214 echo "Creating prometheus-community/prometheus-kafka-exporter"
215 helm
install osm-kafka-exporter
--namespace $NAMESPACE --version=$V_KAFKA_EXPORTER --set prometheus.serviceMonitor.enabled
=true
,prometheus.serviceMonitor.additionalLabels.release
=osm-monitoring
,kafkaServer
={kafka.osm.svc.cluster.
local:9092},service.port
=9092 prometheus-community
/prometheus-kafka-exporter
217 kubectl
-n $NAMESPACE apply
-f $HERE/kafka-exporter-dashboard.yaml
219 # Deploy summary dashboard
220 kubectl
-n $NAMESPACE apply
-f $HERE/summary-dashboard.yaml
222 # Deploy nodes dashboards
223 kubectl
-n $NAMESPACE apply
-f $HERE/nodes-dashboard.yaml