Skip to content

Commit

Permalink
Merge pull request #108 from jasonrhodes/more-scripting
Browse files Browse the repository at this point in the history
Adds more scripts for post-setup
  • Loading branch information
jasonrhodes authored Oct 24, 2024
2 parents ce4ba6a + 0f9d39c commit cefde56
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 45 deletions.
13 changes: 0 additions & 13 deletions scripts/rca-demo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,6 @@

Docs for running scripts in this folder.

### Prerequisites

On a mac you can easily install these prerequisites with: `brew install minikube helm kubernetes-cli`

- Create a Kubernetes cluster. For local development `minikube` is recommended. There are no specific requirements, so you can create a local one, or use a managed Kubernetes cluster, such as [GKE](https://cloud.google.com/kubernetes-engine), [EKS](https://aws.amazon.com/eks/), or [AKS](https://azure.microsoft.com/en-us/products/kubernetes-service).
- Set up [kubectl](https://kubernetes.io/docs/reference/kubectl/).
- Set up [Helm](https://helm.sh/).
- Install the Nginx Ingress Controller:
- Set up [Minikube](https://minikube.sigs.k8s.io/docs/)

```
helm install --namespace kube-system nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx
```

## setup

Expand Down
11 changes: 11 additions & 0 deletions scripts/rca-demo/data/mapping-message-alias.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"properties": {
"body_text": {
"type": "match_only_text"
},
"message": {
"type": "alias",
"path": "body_text"
}
}
}
52 changes: 52 additions & 0 deletions scripts/rca-demo/data/rule-01.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"params": {
"criteria": [
{
"comparator": ">",
"metrics": [
{
"name": "A",
"filter": "http.response.status_code:*",
"aggType": "count"
},
{
"name": "B",
"filter": "http.response.status_code>=500",
"aggType": "count"
}
],
"threshold": [
1
],
"timeSize": 1,
"timeUnit": "m",
"equation": "(B/A) * 100",
"label": "500 Errors"
}
],
"alertOnNoData": false,
"alertOnGroupDisappear": false,
"searchConfiguration": {
"query": {
"query": "k8s.namespace.name: \"ingress-nginx\" AND url.path: /api/*",
"language": "kuery"
},
"index": "otel_logs_data"
},
"groupBy": [
"service.name",
"url.path"
]
},
"consumer": "logs",
"schedule": {
"interval": "1m"
},
"tags": [
"demo",
"cli-created"
],
"name": "NGINX 500s",
"rule_type_id": "observability.rules.custom_threshold",
"actions": []
}
59 changes: 59 additions & 0 deletions scripts/rca-demo/post-setup
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/bin/bash

SCRIPTS_DIR=$(dirname "${BASH_SOURCE[0]}")

set -a
source $SCRIPTS_DIR/shared.sh
source $SCRIPTS_DIR/.env
set +a

create_data_view () {
ID=$1
INDICES=$2

EXISTS=$(curl -s $KIBANA_URL/api/data_views/data_view/$ID -H "Authorization: ApiKey $OTEL_DEMO_ES_API_KEY" -H 'elastic-api-version: 2023-10-31')

if [[ $EXISTS == '{"statusCode":404,"error":"Not Found"'* ]]; then
title "Creating data view $1 for indices $2"
curl -X POST $KIBANA_URL/api/data_views/data_view -H 'kbn-xsrf: bananas' -H 'Content-Type: application/json' -H 'elastic-api-version: 2023-10-31' -H "Authorization: ApiKey $OTEL_DEMO_ES_API_KEY" -d "{\"data_view\": { \"name\": \"$1 (Automated by Demo CLI)\", \"title\": \"$2\", \"id\": \"$1\", \"timeFieldName\": \"@timestamp\" }}"
else
title "Data view $1 already exists"
fi
}

create_rule () {
ID=$1
DATA_FILE=$2

curl -X POST $KIBANA_URL/api/alerting/rule/$ID -H 'kbn-xsrf: bananas' -H "Authorization: ApiKey $OTEL_DEMO_ES_API_KEY" -H 'Content-Type: application/json; elastic-api-version: 2023-10-31' -d @$SCRIPTS_DIR/data/$DATA_FILE
}

title "Setting up Kibana assets for the demo..."

if [ -z "${KIBANA_URL}" ]; then
die "You must set KIBANA_URL so that we can post API requests there (please include base path if one exists)"
fi

if [ -z "${OTEL_DEMO_ES_API_KEY}" ]; then
die "You must set OTEL_DEMO_ES_API_KEY (must be valid API key for ES and Kibana APIs)"
fi

# Create data views
create_data_view otel_logs_data logs-*otel*

# Create rules
create_rule 9055220c-8fb1-4f9f-be7c-0a33eb2bafc5 rule-01.json

echo -e "\n"

# Update mappings in ES
# NOTE: this will fail if the data stream is not created
# TODO: Update the component template also, and just swallow errors on this call
title "Attempting to add message alias for otel logs"
curl -X PUT http://localhost:9200/logs-*otel*/_mapping -H "Authorization: ApiKey $OTEL_DEMO_ES_API_KEY" -H "Content-Type: application/json" -d @$SCRIPTS_DIR/data/mapping-message-alias.json

echo -e "\n"

# Enable EEM
title "Attempting to enable EEM"
curl -X PUT -H "Authorization: ApiKey $OTEL_DEMO_ES_API_KEY" -H "kbn-xsrf: bananas" $KIBANA_URL/internal/entities/managed/enablement
36 changes: 4 additions & 32 deletions scripts/rca-demo/setup
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,10 @@

APP_NAME=my-otel-demo

# Define bash colors
# Reset
Color_Off='\033[0m' # Text Reset

# Regular Colors
Black='\033[0;30m' # Black
Red='\033[0;31m' # Red
Green='\033[0;32m' # Green
Yellow='\033[0;33m' # Yellow
Blue='\033[0;34m' # Blue
Purple='\033[0;35m' # Purple
Cyan='\033[0;36m' # Cyan
White='\033[0;37m' # White

# Bold
BBlack='\033[1;30m' # Black
BRed='\033[1;31m' # Red
BGreen='\033[1;32m' # Green
BYellow='\033[1;33m' # Yellow
BBlue='\033[1;34m' # Blue
BPurple='\033[1;35m' # Purple
BCyan='\033[1;36m' # Cyan
BWhite='\033[1;37m' # White

title () {
echo -e ${Cyan}"<[${BBlue} $1 ${Cyan}]>${Color_Off}"
}

die () {
echo -e "${BRed}ERROR: $1${Color_Off}"
exit 1
}
# source shared utils
set -a
source ./shared.sh
set +a

title "Checking environment for $APP_NAME..."

Expand Down
33 changes: 33 additions & 0 deletions scripts/rca-demo/shared.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@

# Define bash colors
# Reset
Color_Off='\033[0m' # Text Reset

# Regular Colors
Black='\033[0;30m' # Black
Red='\033[0;31m' # Red
Green='\033[0;32m' # Green
Yellow='\033[0;33m' # Yellow
Blue='\033[0;34m' # Blue
Purple='\033[0;35m' # Purple
Cyan='\033[0;36m' # Cyan
White='\033[0;37m' # White

# Bold
BBlack='\033[1;30m' # Black
BRed='\033[1;31m' # Red
BGreen='\033[1;32m' # Green
BYellow='\033[1;33m' # Yellow
BBlue='\033[1;34m' # Blue
BPurple='\033[1;35m' # Purple
BCyan='\033[1;36m' # Cyan
BWhite='\033[1;37m' # White

title () {
echo -e ${Cyan}"<[${BBlue} $1 ${Cyan}]>${Color_Off}"
}

die () {
echo -e "${BRed}ERROR: $1${Color_Off}"
exit 1
}

0 comments on commit cefde56

Please sign in to comment.