From 1c0a5b3215fe13640f25f1bf7799437d581c9d43 Mon Sep 17 00:00:00 2001 From: Ulrich Schlueter Date: Mon, 6 Dec 2021 16:04:32 +0100 Subject: [PATCH] Add Documentation and Scripts for ARO Monitor Metric testing --- docs/img/AROMonitor.png | Bin 0 -> 52016 bytes docs/img/SOCATConnection.png | Bin 0 -> 34315 bytes docs/unit-testing-for-monitoring-metrics.md | 71 ++++++++++++++ hack/local-monitor-testing/configureRemote.sh | 36 +++++++ hack/local-monitor-testing/deploy_MDM_VM.sh | 92 ++++++++++++++++++ .../sample/dockerStartCommand.sh | 52 ++++++++++ hack/local-monitor-testing/startMDMNetwork.sh | 32 ++++++ 7 files changed, 283 insertions(+) create mode 100644 docs/img/AROMonitor.png create mode 100644 docs/img/SOCATConnection.png create mode 100644 docs/unit-testing-for-monitoring-metrics.md create mode 100755 hack/local-monitor-testing/configureRemote.sh create mode 100755 hack/local-monitor-testing/deploy_MDM_VM.sh create mode 100644 hack/local-monitor-testing/sample/dockerStartCommand.sh create mode 100755 hack/local-monitor-testing/startMDMNetwork.sh diff --git a/docs/img/AROMonitor.png b/docs/img/AROMonitor.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c74a0d3ccb67e8801b998f12159763f72ed187 GIT binary patch literal 52016 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 HuHX4Tuui9G literal 0 HcmV?d00001 diff --git a/docs/unit-testing-for-monitoring-metrics.md b/docs/unit-testing-for-monitoring-metrics.md new file mode 100644 index 00000000000..0943262b9dd --- /dev/null +++ b/docs/unit-testing-for-monitoring-metrics.md @@ -0,0 +1,71 @@ + +# Testing ARO Monitor Metrics + + + +## The Monitor Architecture + +The ARO monitor component (the part of the aro binary you activate when you execute ./cmd/aro monitor) collects and emits the various metrics about cluster health (and its own) we want to see in Geneva. + +To send data to Geneva the monitor uses an instance of a Geneva MDM container as a proxy of the Geneva API. The MDM container accepts statsd formatted data (the Azure Geneva version of statsd, that is) over a UNIX (Domain) socket. The MDM container then forwards the metric data over a https link to the Geneva API. Please note that using a Unix socket can only be accessed from then same machine. + +The monitor picks the required information about which clusters should actualyl monitor from its corresponding Cosmos DB. If multiple monitor instances run in parallel (i.e. connect to the same database instance) as is the case in production, they negotiate which instance monitors what cluster (see : [monitoring.md](./monitoring.md)). + + +![Aro Monitor Architecture](img/AROMonitor.png "Aro Monitor Architecture") + + +## Unit Testing Setup + +There are two ways set up: +- Run the Geneva container locally. +- Spawn a VM, start the Geneva container there and connect/tunnel to it. + +### Local container setup + +An example docker command to start the container locally is here (you will need to adapt some parameters): +[Example](../hack/local-monitor-testing/sample/dockerStartCommand.sh) + +Two things to adapt: +* Amongst other things container needs to be provided with the Geneva key and certificate. For the INT instance that is the rp-metrics-int.pem you find in the secrets folder after running `make secrets`. Copy that to /etc/mdm.pem or adapt the volume mount accordingly. The mdm container logs will tell you of that worked or not. +* When you start the montitor locally in local dev mode, the monitor looks for the Unix Socket file mdm_statsd.socket in the current path (usually ./cmd/aro folder) . Adapt the path in the start command accordingly. + +### Remote container setup + +If you can't run the container locally (because you run on macOS and you container tooling does not support Unix Sockets, which is true both for Docker for Desktop or podman) and or don't want to, you can bring up the container on a Linux VM and connect via a socat/ssh chain: +![alt text](img/SOCATConnection.png "SOCAT chain") + +The [deploy script](../hack/local-monitor-testing/deploy_MDM_VM.sh) deploys such a VM on Azure (if you ./env things properly), configures it and installs the container. + +The [start script](../hack/local-monitor-testing/startMDMNetwork.sh) can then be used to established the network connection as depicted in the diagram. For local VMs you may want to skip the ssh tunnel step. + + +### Starting the monitor + +When starting the monitor , make sure to have your + +- CLUSTER_MDM_ACCOUNT +- CLUSTER_MDM_NAMESPACE + +environment variables set to Geneva account and namespace where you metrics is supposed to land in Geneva INT (https://jarvis-west-int.cloudapp.net/) + +Use `go run -tags aro ./cmd/aro monitor` to start the monitor. You want to check what the current directory of your monitor is, because that's the folder the monitor will use to search for the mdm_statds.socket file, which needs to match where your mdm container or the socat command creates it. + +A VS Code launch config that does the same would look like. + +```` +{ + "name": "Launch Monitor", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "./cmd/aro", + "buildFlags": "-tags aro", + "console": "integratedTerminal", + "args": ["-loglevel=debug", + "monitor", + ], + "env": {"CLUSTER_MDM_ACCOUNT": "", + "CLUSTER_MDM_NAMESPACE":"" } + }, +```` \ No newline at end of file diff --git a/hack/local-monitor-testing/configureRemote.sh b/hack/local-monitor-testing/configureRemote.sh new file mode 100755 index 00000000000..d102ccc884b --- /dev/null +++ b/hack/local-monitor-testing/configureRemote.sh @@ -0,0 +1,36 @@ +# Setup the VM +rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 +rpm --import https://packages.microsoft.com/keys/microsoft.asc + +yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm + +cat >/etc/yum.repos.d/azure.repo <<'EOF' +[azure-cli] +name=azure-cli +baseurl=https://packages.microsoft.com/yumrepos/azure-cli +enabled=yes +gpgcheck=yes +EOF + +yum --enablerepo=rhui-rhel-7-server-rhui-optional-rpms -y install \ + azure-cli \ + docker \ + jq \ + gcc \ + rh-git29 \ + rh-python36 \ + tmpwatch \ + lttng-usr \ + gpgme-devel \ + libassuan-devel \ + socat + + +sed -i -e 's/^OPTIONS='\''/OPTIONS='\''-G cloud-user /' /etc/sysconfig/docker + +systemctl enable docker +systemctl restart docker + + + + diff --git a/hack/local-monitor-testing/deploy_MDM_VM.sh b/hack/local-monitor-testing/deploy_MDM_VM.sh new file mode 100755 index 00000000000..07350dd98e6 --- /dev/null +++ b/hack/local-monitor-testing/deploy_MDM_VM.sh @@ -0,0 +1,92 @@ +#!/bin/bash -e +set +x + +BASE=$( git rev-parse --show-toplevel) + +HOSTNAME=$( hostname ) +NAME="mdm" +MDMIMAGE=linuxgeneva-microsoft.azurecr.io/genevamdm:master_20211120.1 +MDMFRONTENDURL=https://int2.int.microsoftmetrics.com/ +MDMSOURCEENVIRONMENT=$LOCATION +MDMSOURCEROLE=rp +MDMSOURCEROLEINSTANCE=$HOSTNAME + +echo "Using:" + +echo "Resourcegroup = $RESOURCEGROUP" +echo "User = $USER" +echo "HOSTNAME = $HOSTNAME" +echo "Containername = $NAME" +echo "Location = $LOCATION" +echo "MDM image = $MDMIMAGE" +echo " (version hardcoded. Check against pkg/util/version/const.go if things don't work)" +echo "Geneva API URL= $MDMFRONTENDURL" +echo "MDMSOURCEENV = $MDMSOURCEENVIRONMENT" +echo "MDMSOURCEROLE = $MDMSOURCEROLE" +echo "MDMSOURCEROLEINSTANCE = $MDMSOURCEROLEINSTANCE" + +VMName="$USER-mdm-link" + +CLOUDUSER="cloud-user" + + + +if [ "$(az vm show -g $RESOURCEGROUP --name $VMName)" = "" ]; +then + echo "Creating VM $VMName in RG $RESOURCEGROUP" + az vm create -g $RESOURCEGROUP -n $VMName --image RedHat:RHEL:7-LVM:latest --ssh-key-values @~/.ssh/id_rsa.pub --admin-username $CLOUDUSER +else + echo "VM already exists, skipping..." +fi + + +PUBLICIP=$( az vm list-ip-addresses --name $VMName -g $RESOURCEGROUP | jq -r '.[0].virtualMachine.network.publicIpAddresses[0].ipAddress' ) + +echo "Found IP $PUBLICIP" + +scp $BASE/secrets/rp-metrics-int.pem $CLOUDUSER@$PUBLICIP:mdm.pem +scp $BASE/hack/local-monitor-testing-MACOS/2configureRemote.sh $CLOUDUSER@$PUBLICIP: + +ssh $CLOUDUSER@$PUBLICIP "sudo cp mdm.pem /etc/mdm.pem" +ssh $CLOUDUSER@$PUBLICIP "sudo ./configureRemote.sh" + + +ssh $CLOUDUSER@$PUBLICIP "sudo docker pull $MDMIMAGE" + +cat < $BASE/dockerStartCommand.sh +docker run \ + --entrypoint /usr/sbin/MetricsExtension \ + --hostname $HOSTNAME \ + --name $NAME \ + -d \ + --restart=always \ + -m 2g \ + -v /etc/mdm.pem:/etc/mdm.pem \ + -v /var/etw:/var/etw:z \ + $MDMIMAGE \ + -CertFile /etc/mdm.pem \ + -FrontEndUrl $MDMFRONTENDURL \ + -Logger Console \ + -LogLevel Warning \ + -PrivateKeyFile /etc/mdm.pem \ + -SourceEnvironment $MDMSOURCEENVIRONMENT \ + -SourceRole $MDMSOURCEROLE \ + -SourceRoleInstance $MDMSOURCEROLEINSTANCE +EOF + + +#disable SELINUX (don't shoot me) +ssh $CLOUDUSER@$PUBLICIP "sudo setenforce 0" +ssh $CLOUDUSER@$PUBLICIP "sudo getenforce" + +#make it permanent +ssh $CLOUDUSER@$PUBLICIP "sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config" + + +ssh $CLOUDUSER@$PUBLICIP "sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent" +ssh $CLOUDUSER@$PUBLICIP "sudo firewall-cmd --reload" + + +scp $BASE/dockerStartCommand.sh $CLOUDUSER@$PUBLICIP: +ssh $CLOUDUSER@$PUBLICIP "chmod +x dockerStartCommand.sh" +ssh $CLOUDUSER@$PUBLICIP "sudo ./dockerStartCommand.sh &" diff --git a/hack/local-monitor-testing/sample/dockerStartCommand.sh b/hack/local-monitor-testing/sample/dockerStartCommand.sh new file mode 100644 index 00000000000..aab29bbc5d3 --- /dev/null +++ b/hack/local-monitor-testing/sample/dockerStartCommand.sh @@ -0,0 +1,52 @@ + + +BASE=$( git rev-parse --show-toplevel) + +SOCKETPATH="$BASE/cmd/aro" + +HOSTNAME=$( hostname ) +NAME="mdm" +MDMIMAGE=linuxgeneva-microsoft.azurecr.io/genevamdm:master_20211120.1 +MDMFRONTENDURL=https://int2.int.microsoftmetrics.com/ +MDMSOURCEENVIRONMENT=$LOCATION +MDMSOURCEROLE=rp +MDMSOURCEROLEINSTANCE=$HOSTNAME + + +echo "Using:" + +echo "Resourcegroup = $RESOURCEGROUP" +echo "User = $USER" +echo "HOSTNAME = $HOSTNAME" +echo "Containername = $NAME" +echo "Location = $LOCATION" +echo "MDM image = $MDMIMAGE" +echo " (version hardcoded. Check against pkg/util/version/const.go if things don't work)" +echo "Geneva API URL= $MDMFRONTENDURL" +echo "MDMSOURCEENV = $MDMSOURCEENVIRONMENT" +echo "MDMSOURCEROLE = $MDMSOURCEROLE" +echo "MDMSOURCEROLEINSTANCE = $MDMSOURCEROLEINSTANCE" + +cp $BASE/secrets/rp-metrics-int.pem /etc/mdm.pem + + + + +podman run \ + --entrypoint /usr/sbin/MetricsExtension \ + --hostname $HOSTNAME \ + --name $NAME \ + -d \ + --restart=always \ + -m 2g \ + -v /etc/mdm.pem:/etc/mdm.pem \ + -v $SOCKETPATH:/var/etw:z \ + $MDMIMAGE \ + -CertFile /etc/mdm.pem \ + -FrontEndUrl $MDMFRONTENDURL \ + -Logger Console \ + -LogLevel Debug \ + -PrivateKeyFile /etc/mdm.pem \ + -SourceEnvironment $MDMSOURCEENVIRONMENT \ + -SourceRole $MDMSOURCEROLE \ + -SourceRoleInstance $MDMSOURCEROLEINSTANCE \ No newline at end of file diff --git a/hack/local-monitor-testing/startMDMNetwork.sh b/hack/local-monitor-testing/startMDMNetwork.sh new file mode 100755 index 00000000000..6a7387c78f0 --- /dev/null +++ b/hack/local-monitor-testing/startMDMNetwork.sh @@ -0,0 +1,32 @@ +#!/bin/bash -e +set +x + +BASE=$( git rev-parse --show-toplevel) +SOCKETFILE="$BASE/cmd/aro/mdm_statsd.socket" + +echo "Using:" + +echo "Resourcegroup = $RESOURCEGROUP" +echo "User = $USER" + +VMName="$USER-mdm-link" +CLOUDUSER="cloud-user" + + +PUBLICIP=$( az vm list-ip-addresses --name $VMName -g $RESOURCEGROUP | jq -r '.[0].virtualMachine.network.publicIpAddresses[0].ipAddress' ) + +echo "Found IP $PUBLICIP, starting socat on the mdm-link vm" +ssh $CLOUDUSER@$PUBLICIP "sudo socat -v TCP-LISTEN:12345,fork UNIX-CONNECT:/var/etw/mdm_statsd.socket" & +sleep 3 + +echo "Starting SSH Tunnel" +ssh $CLOUDUSER@$PUBLICIP -N -L 12345:127.0.0.1:12345 & +sleep 3 + +if [ -f "$SOCKETFILE" ] ; then + rm "$SOCKETFILE" +fi +echo "Starting local socat link to the tunnel" +socat -v UNIX-LISTEN:$SOCKETFILE,fork TCP-CONNECT:127.0.0.1:12345 & + +