From 179a02461181512c6de51500ba46b8111c931eb5 Mon Sep 17 00:00:00 2001 From: coutoPL Date: Thu, 28 May 2026 10:03:22 +0200 Subject: [PATCH] [RORDEV-2052] added: kibana data view creation util --- ror-demo-cluster/docker-compose.yml | 3 +- shared/init-scripts/init.sh | 6 ++- shared/init-scripts/utils/lib.sh | 60 +++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/ror-demo-cluster/docker-compose.yml b/ror-demo-cluster/docker-compose.yml index 1675ade..83b95f0 100644 --- a/ror-demo-cluster/docker-compose.yml +++ b/ror-demo-cluster/docker-compose.yml @@ -40,7 +40,7 @@ services: - node.name=es-ror-single - discovery.type=single-node - bootstrap.memory_lock=true - - "ES_JAVA_OPTS=-Xms512m -Xmx512m -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Dcom.readonlyrest.settings.loading.attempts.count=1 -Dcom.readonlyrest.settings.loading.delay=0s" + - "ES_JAVA_OPTS=-Xms512m -Xmx512m -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Dcom.readonlyrest.settings.loading.attempts.count=1 -Dcom.readonlyrest.settings.loading.delay=1" - ES_VERSION=${ES_VERSION:-ES_VERSION_NOT_CONFIGURED} healthcheck: test: ["CMD-SHELL", "curl -fksS --connect-timeout 3 --max-time 5 --retry 2 --retry-connrefused -u admin:admin https://127.0.0.1:9200/_cluster/health >/dev/null || exit 1"] @@ -101,6 +101,7 @@ services: ELASTICSEARCH_ADDRESS: https://es-ror:9200 ELASTICSEARCH_USER: kibana ELASTICSEARCH_PASSWORD: kibana + KIBANA_ADDRESS: https://kbn-ror:5601 healthcheck: test: "test -f /tmp/init_done || exit 1" interval: 10s diff --git a/shared/init-scripts/init.sh b/shared/init-scripts/init.sh index 545d6ee..8012d14 100755 --- a/shared/init-scripts/init.sh +++ b/shared/init-scripts/init.sh @@ -10,4 +10,8 @@ createDataStream "logs-frontend-dev" && generate_log_documents 100 | putDocument createDataStream "logs-business-dev" && generate_log_documents 100 | putDocument "logs-business-dev" createDataStream "logs-system-dev" && generate_log_documents 100 | putDocument "logs-system-dev" -createIndex "data-business-index" && generate_log_documents 100 | putDocument "data-business-index" \ No newline at end of file +#createKibanaDataView "logs-frontend-*" "Frontend logs" "@timestamp" "admin" "admin" "EndUsers" +#createKibanaDataView "logs-business-*" "Business logs" "@timestamp" "admin" "admin" "BusinessUsers" +#createKibanaDataView "logs-system-*" "System logs" "@timestamp" "admin" "admin" "Administrators" + +createIndex "data-business-index" && generate_log_documents 100 | putDocument "data-business-index" diff --git a/shared/init-scripts/utils/lib.sh b/shared/init-scripts/utils/lib.sh index bde4c3a..e7f5153 100755 --- a/shared/init-scripts/utils/lib.sh +++ b/shared/init-scripts/utils/lib.sh @@ -102,6 +102,66 @@ function createDataStream() { return 0 } +function createKibanaDataView() { + if [ "$#" -lt 1 ] || [ "$#" -gt 6 ]; then + echo "ERROR: Required: 1) index pattern (title); optionally 2) data view name, 3) time field name, 4) Kibana user, 5) Kibana password, 6) tenancy (ROR group)" + return 1 + fi + + if ! [ -v KIBANA_ADDRESS ] || [ -z "$KIBANA_ADDRESS" ]; then + echo "ERROR: required variable KIBANA_ADDRESS not set or empty" + exit 2 + fi + + INDEX_PATTERN=$1 + DATA_VIEW_NAME=${2:-$INDEX_PATTERN} + TIME_FIELD_NAME=$3 + KBN_USER=${4:-${KIBANA_USER:-}} + KBN_PASS=${5:-${KIBANA_PASSWORD:-}} + TENANCY=$6 + + if [ -z "$KBN_USER" ]; then + echo "ERROR: Kibana user not provided (param 4) and KIBANA_USER env not set" + exit 3 + fi + + if [ -z "$KBN_PASS" ]; then + echo "ERROR: Kibana password not provided (param 5) and KIBANA_PASSWORD env not set" + exit 4 + fi + + data_view_fields="\"title\": \"$INDEX_PATTERN\", \"name\": \"$DATA_VIEW_NAME\"" + if [ -n "$TIME_FIELD_NAME" ]; then + data_view_fields="$data_view_fields, \"timeFieldName\": \"$TIME_FIELD_NAME\"" + fi + + tenancy_header=() + tenancy_info="no tenancy header" + if [ -n "$TENANCY" ]; then + tenancy_header=(-H "x-ror-tenancy-id: $TENANCY") + tenancy_info="tenancy: [$TENANCY]" + fi + + response=$(curl -k -s -L -w "\n%{http_code}" -u "$KBN_USER":"$KBN_PASS" \ + -X POST "$KIBANA_ADDRESS/api/data_views/data_view" \ + -H "Content-Type: application/json" \ + -H "kbn-xsrf: true" \ + "${tenancy_header[@]}" -d "{ + \"data_view\": { $data_view_fields } + }" + ) + + http_status=$(echo "$response" | tail -n 1) + response_body=$(echo "$response" | sed \$d) + + if [[ "$http_status" != 2* ]]; then + echo "ERROR: Cannot create Kibana data view [$DATA_VIEW_NAME] for index pattern [$INDEX_PATTERN] ($tenancy_info). HTTP status: $http_status, response body: $response_body" + return 5 + fi + + return 0 +} + function putDocument() { if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then echo "ERROR: Required: 1) index name, optionally 2) document JSON string (or via stdin)"