16 Commits

Author SHA1 Message Date
justin 74c05e5a58 Update README.md 2025-02-11 14:37:47 -05:00
justin fe93c84d6b Merge pull request #7 from ZertoPublic/recklessop-patch-1
Update protectedvms.json
2024-05-29 16:38:05 -04:00
justin 40ec3be00e Update protectedvms.json 2024-05-29 16:37:17 -04:00
justin fa6f5d4e6d Update exporterhealth.json 2023-12-26 18:10:45 -05:00
justin fcc640dbfc Update README.md 2023-04-18 18:34:31 -04:00
justin 4094867c4d Update README.md 2023-04-18 18:33:16 -04:00
justin 5c023cca9d Update README.md 2023-04-18 18:23:28 -04:00
justin d9293f4e13 Create CODEOWNERS 2023-04-18 18:16:50 -04:00
justin 554da3c0bc Update README.md 2023-04-18 18:12:02 -04:00
justin d16ce8e8d1 Update zertometrics.json 2023-04-17 17:12:33 -04:00
justin 2d5c459d85 Update README.md 2023-04-17 16:40:08 -04:00
justin c99ccfcdb3 Update zertoencryption.json 2023-04-11 20:42:50 -04:00
justin 30eb343c0b Create encryptionpervm.json 2023-04-05 22:59:48 -04:00
justin 0b4d87fe30 Update getupdates.sh 2023-04-01 18:51:20 -04:00
justin 2bc42048b1 Create getupdates.sh 2023-04-01 18:49:35 -04:00
justin 41a6d2e6c2 Merge pull request #1 from recklessop/add-license-1
Create LICENSE
2023-04-01 14:57:11 -04:00
8 changed files with 512 additions and 133 deletions
+6
View File
@@ -0,0 +1,6 @@
##########################################
# code ownership
##########################################
# default ownership: default owners for everything in the repo (Unless a later match takes precedence)
* @recklessop
+34 -7
View File
@@ -1,8 +1,24 @@
# Zerto Resiliency Observation Console
zROC for short, is a docker-compose based stack that allows you to observe Zerto API data in a visual format using Prometheus and Grafana.
zROC for short, is a docker-compose based software stack that allows you to observe standard Zerto API data in a visual format using Prometheus and Grafana.
The custom part of this stack is the Prometheus exporter code which is developed separately [here.](https://github.com/recklessop/Zerto_Exporter)
The rest of the stack is a standard Prometheus container and a standard Grafana container. The additional configuration files in this repo will help to configure both Prometheus and Grafana so that it can be used out of the box.
The rest of the stack is a standard Prometheus container and a standard Grafana container. The additional configuration files in this repo help to configure both Prometheus and Grafana to deliver customer value out of the box.
While some dashboards are pre-build the project maintainers encourage you to build your own custom dashboards or copy and modify existing dashboards to what best suits your needs.
# Legal Disclaimer
This script is open-source and is not supported under any Zerto support program or service. The author and Zerto further disclaim all implied warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose.
In no event shall Zerto, its authors or anyone else involved in the creation, production or delivery of the scripts be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or the inability to use the sample scripts or documentation, even if the author or Zerto has been advised of the possibility of such damages. The entire risk arising out of the use or performance of the sample scripts and documentation remains with you.
## What it does and does not do
### Supported
- ZVM Appliance for VMware (Linux based ZVM)
### Not Supported
- Windows-based ZVM
- Zerto Cloud Appliance for Azure or AWS
## Requirements
- Docker host (I like using Ubuntu with docker.io and docker-compose installed)
@@ -22,12 +38,12 @@ Edit docker-compose.yml, and provide values for the following variables for the
- ZVM client id (generate this in keycloak)
- ZVM client secret (also generated in keycloak)
- VCenter ip or hostname
- VCenter username
- VCenter username (Optional - Also this can be a read only user. As it is just used to pull VRA CPU/Memory stats from vCenter)
- VCenter password
```yaml
zertoexporter:
image: recklessop/zerto-exporter:latest
image: recklessop/zerto-exporter:stable
command: python python-node-exporter.py
ports:
- "9999:9999" # edit the port for each additional exporter, in this case it was changed to 9998
@@ -60,7 +76,7 @@ For each site you want to monitor you need to have an exporter configured like t
zertoexporter:
container_name: zvmexporter1
hostname: zvmexporter1 # this hostname will need to be set in the prometheus.yaml file as well
image: recklessop/zerto-exporter:latest
image: recklessop/zerto-exporter:stable
command: python python-node-exporter.py
ports:
- "9999:9999"
@@ -140,7 +156,18 @@ docker-compose up -d
http://<IP_Address_of_Docker_Host>:3000
Login credentials are admin / metricdata
Login credentials are admin / zertodata
(you can change this by changing the grafana environment variable in the docker-compose.yaml file.
```
grafana:
image: grafana/grafana
...
environment:
- GF_SECURITY_ADMIN_PASSWORD=zertodata
...
```
There will be several dashboards provisioned out of the box that will help monitor most metrics. Custom graphs and custom dashboards can be added too.
@@ -165,5 +192,5 @@ The goal of this dashboard is to help you understand the workload on each of you
![VRA Metrics](/images/vra-dashboard.jpg)
### Encryption Detection
This feature is in private preview. If you would like to learn more contact your Zerto account team. With Zerto Encryption Detection enabled, Zerto looks at each write that is being protected to determine if it is encrypted data or unencrypted data. The goal is to help customers detect anomalies caused by ransomware attacks in near real time.
With Zerto Encryption Detection enabled, Zerto looks at each write that is being protected to determine if it is encrypted data or unencrypted data. The goal is to help customers detect anomalies caused by ransomware attacks in near real time.
![Encryption Detection](/images/encryption-detection.jpg)
+15
View File
@@ -0,0 +1,15 @@
#!/bin/bash
# change to the zroc directory
cd /home/zroc/zroc
# pull any updates from the git repository
git pull
# check if there are any changes
if [[ $(git diff HEAD@{1} HEAD) ]]; then
# if getupdates.sh scripts is update it make it executable
chmod +x ./cron/getupdates.sh
# if there are changes, run docker-compose up with force-restart
docker-compose up -d --force-restart
fi
@@ -0,0 +1,224 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"target": {
"limit": 100,
"matchAny": false,
"tags": [],
"type": "dashboard"
},
"type": "dashboard"
}
]
},
"description": "",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 8,
"links": [],
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 25,
"w": 24,
"x": 0,
"y": 0
},
"id": 2,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "vm_TotalDataInLBs{VmName=\"$VMName\", SiteName=\"$SiteName\"}",
"interval": "",
"legendFormat": "Total Blocks",
"range": true,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "vm_UnencryptedDataInLBs{VmName=\"$VMName\", SiteName=\"$SiteName\"}",
"hide": false,
"interval": "",
"legendFormat": "Unencrypted Blocks",
"range": true,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "vm_EncryptedDataInLBs{VmName=\"$VMName\", SiteName=\"$SiteName\"}",
"hide": false,
"legendFormat": "Encrypted Blocks",
"range": true,
"refId": "C"
}
],
"title": "Sum of All VMs - Overlayed Stats",
"type": "timeseries"
}
],
"refresh": "",
"revision": 1,
"schemaVersion": 38,
"style": "dark",
"tags": [],
"templating": {
"list": [
{
"current": {
"selected": true,
"text": "General Utils/rdp licence",
"value": "General Utils/rdp licence"
},
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"definition": "query_result(vm_EncryptedDataInLBs{})",
"hide": 0,
"includeAll": false,
"label": "VM Name",
"multi": false,
"name": "VMName",
"options": [],
"query": {
"query": "query_result(vm_EncryptedDataInLBs{})",
"refId": "StandardVariableQuery"
},
"refresh": 1,
"regex": "/.*VmName=\"([^\"]+)\".*/",
"skipUrlSync": false,
"sort": 0,
"type": "query"
},
{
"current": {
"selected": true,
"text": "Sunrise Main",
"value": "Sunrise Main"
},
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"definition": "query_result(vm_actualrpo{})",
"hide": 0,
"includeAll": false,
"label": "Site Name",
"multi": false,
"name": "SiteName",
"options": [],
"query": {
"query": "query_result(vm_actualrpo{})",
"refId": "StandardVariableQuery"
},
"refresh": 1,
"regex": "/.*SiteName=\"([^\"]+)\".*/",
"skipUrlSync": false,
"sort": 0,
"type": "query"
}
]
},
"time": {
"from": "now-7d",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "Encryption per VM",
"uid": "oLVf6cY4z",
"version": 5,
"weekStart": ""
}
@@ -24,7 +24,6 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 8,
"links": [],
"liveNow": false,
"panels": [
@@ -84,6 +83,7 @@
},
"tooltip": {
"show": true,
"showColorScale": false,
"yHistogram": false
},
"yAxis": {
@@ -91,7 +91,7 @@
"reverse": false
}
},
"pluginVersion": "9.4.7",
"pluginVersion": "10.2.3",
"targets": [
{
"datasource": {
@@ -107,18 +107,117 @@
],
"title": "Data Exporter Thread Status",
"type": "heatmap"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "m"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
},
"id": 3,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "exporter_uptime",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "A",
"useBackend": false
}
],
"title": "Exporter Uptime",
"type": "timeseries"
}
],
"refresh": "30s",
"revision": 1,
"schemaVersion": 38,
"style": "dark",
"schemaVersion": 39,
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-30m",
"from": "now-7d",
"to": "now"
},
"timepicker": {
@@ -136,6 +235,6 @@
"timezone": "",
"title": "Exporter Health",
"uid": "Z23A-Ma4k",
"version": 6,
"version": 1,
"weekStart": ""
}
}
@@ -38,6 +38,7 @@
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
@@ -51,6 +52,7 @@
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
@@ -100,6 +102,7 @@
"showLegend": true
},
"tooltip": {
"maxHeight": 600,
"mode": "single",
"sort": "none"
}
@@ -132,6 +135,7 @@
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
@@ -145,6 +149,7 @@
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
@@ -195,6 +200,7 @@
"showLegend": true
},
"tooltip": {
"maxHeight": 600,
"mode": "single",
"sort": "none"
}
@@ -219,22 +225,21 @@
],
"refresh": "30s",
"revision": 1,
"schemaVersion": 38,
"style": "dark",
"schemaVersion": 39,
"tags": [],
"templating": {
"list": [
{
"current": {
"selected": true,
"text": "Sunrise DR",
"value": "Sunrise DR"
"selected": false,
"text": "JP-Lab",
"value": "JP-Lab"
},
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"definition": "query_result(vm_actualrpo{})",
"definition": "query_result(vm_iops{})",
"hide": 0,
"includeAll": false,
"label": "Site Name",
@@ -242,8 +247,9 @@
"name": "SiteName",
"options": [],
"query": {
"query": "query_result(vm_actualrpo{})",
"refId": "StandardVariableQuery"
"qryType": 3,
"query": "query_result(vm_iops{})",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "/.*SiteName=\"([^\"]+)\".*/",
@@ -257,6 +263,7 @@
"from": "now-24h",
"to": "now"
},
"timeRangeUpdatedDuringEditOrView": false,
"timepicker": {
"refresh_intervals": [
"30s",
@@ -214,7 +214,7 @@
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "sum(vm_UnencryptedDataInLBs)",
"expr": "sum(vm_UnencryptedDataInLBs{SiteName=\"$SiteName\"})",
"hide": false,
"interval": "",
"legendFormat": "Unencrypted Logical Blocks",
@@ -227,7 +227,7 @@
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "sum(vm_EncryptedDataInLBs)",
"expr": "sum(vm_EncryptedDataInLBs{SiteName=\"$SiteName\"})",
"hide": false,
"legendFormat": "Encrypted Logical Blocks",
"range": true,
@@ -653,6 +653,6 @@
"timezone": "",
"title": "Encryption Analyzer Dashboard",
"uid": "DqUCTVcVz",
"version": 1,
"version": 2,
"weekStart": ""
}
+109 -108
View File
@@ -34,6 +34,7 @@
},
"fieldConfig": {
"defaults": {
"decimals": 0,
"mappings": [],
"thresholds": {
"mode": "absolute",
@@ -182,7 +183,7 @@
"overrides": []
},
"gridPos": {
"h": 16,
"h": 25,
"w": 12,
"x": 12,
"y": 0
@@ -236,13 +237,13 @@
"expr": "vpg_actual_rpo{SiteName=\"$SiteName\"}",
"format": "time_series",
"instant": false,
"interval": "",
"interval": "1",
"legendFormat": "{{VpgName}}",
"range": true,
"refId": "A"
}
],
"title": "RPO History Map",
"title": "VPG RPO History Map",
"type": "heatmap"
},
{
@@ -304,7 +305,7 @@
"overrides": []
},
"gridPos": {
"h": 8,
"h": 9,
"w": 12,
"x": 0,
"y": 8
@@ -402,7 +403,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 16
"y": 17
},
"id": 10,
"options": {
@@ -447,100 +448,6 @@
"title": "VPG Journal History Length",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "decmbytes"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 16
},
"id": 4,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "vm_journal_used_storage_mb{SiteName=\"$SiteName\"}",
"interval": "",
"legendFormat": "{{VmName}}",
"range": true,
"refId": "A"
}
],
"title": "Journal Storage Size",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
@@ -603,7 +510,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 24
"y": 25
},
"id": 6,
"options": {
@@ -689,7 +596,7 @@
}
]
},
"unit": "MBs"
"unit": "decmbytes"
},
"overrides": []
},
@@ -697,9 +604,9 @@
"h": 8,
"w": 12,
"x": 12,
"y": 24
"y": 25
},
"id": 12,
"id": 4,
"options": {
"legend": {
"calcs": [],
@@ -719,14 +626,14 @@
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "vm_NetworkTrafficCounterInMBs{SiteName=\"$SiteName\"}",
"expr": "vm_journal_used_storage_mb{SiteName=\"$SiteName\"}",
"interval": "",
"legendFormat": "{{VmName}}",
"range": true,
"refId": "A"
}
],
"title": "Network Throughput",
"title": "Journal Storage Size",
"type": "timeseries"
},
{
@@ -792,7 +699,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 32
"y": 33
},
"id": 8,
"options": {
@@ -823,6 +730,100 @@
],
"title": "IOps",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "MBs"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 33
},
"id": 12,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"editorMode": "builder",
"expr": "vm_NetworkTrafficCounterInMBs{SiteName=\"$SiteName\"}",
"interval": "",
"legendFormat": "{{VmName}}",
"range": true,
"refId": "A"
}
],
"title": "Network Throughput",
"type": "timeseries"
}
],
"refresh": "30s",
@@ -835,8 +836,8 @@
{
"current": {
"selected": false,
"text": "Sunrise Main",
"value": "Sunrise Main"
"text": "Kalida",
"value": "Kalida"
},
"datasource": {
"type": "prometheus",