Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds more scripts for post-setup #108

Merged
merged 2 commits into from
Oct 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this will fail if the data stream doesn't exist, in that case you need to update the component template as well.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I'll add the component update in a follow up and just make this fail silently


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
}
Loading