adding one-hit monitoring with prometheus, influxdb, telegraf and automatic dashboards
This commit is contained in:
		
							
								
								
									
										13
									
								
								deploy_all.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								deploy_all.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| ## INSTALL docker-compose | ||||
| ## uncomment if you don't have docker-compose installed  #sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose | ||||
| ## uncomment if you don't have docker-compose installed  #sudo chmod +x /usr/local/bin/docker-compose | ||||
|  | ||||
| # START docker-compose | ||||
| docker-compose up -d  | ||||
|  | ||||
| # ADD DATASOURCES AND DASHBOARDS | ||||
| echo "adding dashboards..." | ||||
| docker exec -it -u 0 grafana /var/lib/grafana/ds/add_dashboards.sh | ||||
|  | ||||
| echo "adding datasources..." | ||||
| docker exec -it -u 0 grafana /var/lib/grafana/ds/add_datasources.sh | ||||
| @@ -2,6 +2,7 @@ version: '3' | ||||
|  | ||||
| networks: | ||||
|   public: {} | ||||
|   private: {} | ||||
|  | ||||
| volumes: | ||||
|   grafana_lib: {} | ||||
| @@ -15,6 +16,7 @@ services: | ||||
|       - "8086:8086" | ||||
|     networks: | ||||
|       - public | ||||
|       - private | ||||
|     volumes: | ||||
|       - ./data/influxdb:/var/lib/influxdb | ||||
|     environment: | ||||
| @@ -27,13 +29,13 @@ services: | ||||
|       image: grafana/grafana:5.1.3 | ||||
|       container_name: grafana | ||||
|       ports: | ||||
|         - "3000:3000" | ||||
|         - "3001:3000" | ||||
|       networks: | ||||
|         - public | ||||
|         - private | ||||
|       volumes: | ||||
|         - grafana_lib:/var/lib/grafana | ||||
|         - grafana_ds:/var/lib/grafana/ds:rw | ||||
|         - ${PWD}/grafana/add_datasources.sh:/var/lib/grafana/ds/add_datasources.sh | ||||
|         - ${PWD}/grafana/:/var/lib/grafana/ds/ | ||||
|       environment: | ||||
|         GF_AUTH_ANONYMOUS_ENABLED: "true" | ||||
|         GF_AUTH_ANONYMOUS_ORG_ROLE: "Admin" | ||||
| @@ -52,3 +54,38 @@ services: | ||||
|     environment: | ||||
|       # real influx host | ||||
|       INFLUXDB_URI: "http://localhost:8086" | ||||
|  | ||||
|   prometheus: | ||||
|     image: quay.io/prometheus/prometheus:v2.0.0 | ||||
|     container_name: prometheus | ||||
|     volumes: | ||||
|      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml | ||||
|     networks: | ||||
|      - private | ||||
|     command: "--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus" | ||||
|     ports: | ||||
|      - 9090:9090 | ||||
|     depends_on: | ||||
|      - node_exporter | ||||
|  | ||||
|   node_exporter: | ||||
|     image: prom/node-exporter:v0.13.0 | ||||
|     container_name: node_exporter | ||||
|     volumes: | ||||
|       - ${PWD}/node_exporter/justrun.py:/justrun.py:rw | ||||
|       - ${PWD}/node_exporter/hmon:/hmon:rw | ||||
|       - ${PWD}/node_exporter/smoothlogging:/smoothlogging:rw | ||||
|       - ${PWD}/node_exporter/textfile_collector:/var/lib/node_exporter/textfile_collector/ | ||||
|     networks: | ||||
|       - public | ||||
|       - private | ||||
|     environment: | ||||
|       DOGSNAME:      "Gula&Bodka" | ||||
|     command: | ||||
|       - "--collector.textfile" | ||||
|       - "--collector.textfile.directory=/var/lib/node_exporter/textfile_collector/" | ||||
|     expose: | ||||
|       - 9100 | ||||
|     ports: | ||||
|       - 9100:9100 | ||||
|  | ||||
|   | ||||
							
								
								
									
										13
									
								
								grafana/add_dashboards.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										13
									
								
								grafana/add_dashboards.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -50,7 +50,8 @@ wait_for_api() { | ||||
| replace_datasource() { | ||||
|    local dashboard_file=$1 | ||||
|    local datasource_name=$2 | ||||
|    cmd="sed -i.bak_remove \"s/\\\${DS_INFLUXDB}/${datasource_name}/g\" ${dashboard_file}" | ||||
|    local old_datasource_name=$3 | ||||
|    cmd="sed -i.bak_remove \"s/${old_datasource_name}/${datasource_name}/g\" ${dashboard_file}" | ||||
|    eval ${cmd} || return 1 | ||||
|    return 0 | ||||
| } | ||||
| @@ -58,22 +59,22 @@ replace_datasource() { | ||||
| install_dashboards() { | ||||
|   local dashboard | ||||
|  | ||||
|   for dashboard in dashboards/*.json | ||||
|   for dashboard in /var/lib/grafana/ds/dashboards/*.json | ||||
|  | ||||
|   do | ||||
|   if [[ $(grep "\"name\": \"DS_INFLUXDB\"," ${dashboard}) ]]; then | ||||
|     echo -e "${PURPLE}Dashboard ${dashboard} seems to be for InfluxDB datasource${NC}" | ||||
|     old_datasource_name="\\\${DS_INFLUXDB}" | ||||
|     datasource_name="influxdb" | ||||
|   fi  | ||||
|   if [[ $(grep "\"name\": \"DS_PROMETHEUS\"," ${dashboard}) ]]; then | ||||
|     echo -e "${PURPLE}Dashboard ${dashboard} seems to be for Prometheus datasource${NC}" | ||||
|     old_datasource_name="\\\${DS_PROMETHEUS}" | ||||
|     datasource_name="prometheus" | ||||
|   fi  | ||||
|     if [[ -f "${dashboard}" ]]; then | ||||
|       echo -e "${LCYAN}Installing dashboard ${dashboard}${NC}" | ||||
|       replace_datasource ${dashboard} ${datasource_name} | ||||
|       # backup will be created before wrapping dashboard ^ | ||||
|       #echo -e "{\"dashboard\": `cat $dashboard`}" > "${dashboard}.wrapped" | ||||
|       replace_datasource ${dashboard} ${datasource_name} ${old_datasource_name} | ||||
|       cp ${dashboard} ${dashboard}.wrapped | ||||
|       sed -i '1s/^/{"dashboard":\n/' ${dashboard}.wrapped | ||||
|       echo "}" >> ${dashboard}.wrapped | ||||
| @@ -84,7 +85,6 @@ install_dashboards() { | ||||
|         echo -e "\n** ${RED}installation of: ${PURPLE}\"${dashboard}\"${RED} failed **${NC}" | ||||
|       fi | ||||
|     fi | ||||
|   #rm ${dashboard}.wrapped | ||||
|   done | ||||
| } | ||||
|  | ||||
| @@ -94,4 +94,5 @@ configure_grafana() { | ||||
| } | ||||
|  | ||||
| configure_grafana | ||||
| rm -vf /var/lib/grafana/ds/dashboards/*.{wrapped,bak_remove} | ||||
|  | ||||
|   | ||||
							
								
								
									
										4
									
								
								grafana/add_datasources.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										4
									
								
								grafana/add_datasources.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -2,7 +2,7 @@ | ||||
| #set -e | ||||
|  | ||||
| # ADD INFLUXDB DATASOURCE | ||||
| curl -s -v -H "Content-Type: application/json" \ | ||||
| curl -s -H "Content-Type: application/json" \ | ||||
|     -XPOST http://admin:admin@localhost:3000/api/datasources \ | ||||
|     -d @- <<EOF | ||||
| { | ||||
| @@ -18,7 +18,7 @@ curl -s -v -H "Content-Type: application/json" \ | ||||
| EOF | ||||
|  | ||||
| ## ADD PROMETHEUS DATASOURCE | ||||
| curl -s -v -H "Content-Type: application/json" \ | ||||
| curl -s -H "Content-Type: application/json" \ | ||||
|     -XPOST http://admin:admin@localhost:3000/api/datasources \ | ||||
|     -d @- <<EOF | ||||
| { | ||||
|   | ||||
							
								
								
									
										1243
									
								
								grafana/dashboards/prometheus-2-stats.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1243
									
								
								grafana/dashboards/prometheus-2-stats.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										34
									
								
								prometheus/prometheus.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								prometheus/prometheus.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| # my global config | ||||
| global: | ||||
|   scrape_interval:     15s # By default, scrape targets every 15 seconds. | ||||
|   evaluation_interval: 15s # By default, scrape targets every 15 seconds. | ||||
|   # scrape_timeout is set to the global default (10s). | ||||
|  | ||||
|   # Attach these labels to any time series or alerts when communicating with | ||||
|   # external systems (federation, remote storage, Alertmanager). | ||||
|   external_labels: | ||||
|       monitor: 'codelab-monitor' | ||||
|  | ||||
| # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. | ||||
| rule_files: | ||||
|   # - "first.rules" | ||||
|   # - "second.rules" | ||||
|  | ||||
| # A scrape configuration containing exactly one endpoint to scrape: | ||||
| # Here it's Prometheus itself. | ||||
| scrape_configs: | ||||
|   # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. | ||||
|   - job_name: 'prometheus' | ||||
|  | ||||
|     # Override the global default and scrape targets from this job every 5 seconds. | ||||
|     scrape_interval: 5s | ||||
|  | ||||
|     # metrics_path defaults to '/metrics' | ||||
|     # scheme defaults to 'http'. | ||||
|  | ||||
|     static_configs: | ||||
|       - targets: ['localhost:9090'] | ||||
|   - job_name: "node" | ||||
|     scrape_interval: "15s" | ||||
|     static_configs: | ||||
|       - targets: ['node_exporter:9100'] | ||||
		Reference in New Issue
	
	Block a user
	 seba
					seba