From 1f6fe70c445bec3d129c08b45d52c805c42741e9 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Sun, 20 Apr 2025 20:55:55 +0200 Subject: [PATCH] Added structured logging Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at> --- .env | 2 +- dbrepo-analyse-service/app.py | 2 +- dbrepo-dashboard-service/app.py | 2 +- dbrepo-dashboard-service/init.py | 2 +- .../dashboards/System/dbrepo.json | 5 +- .../dashboards/System/logging.json | 694 ++++++++++++++++++ .../provisioning/datasources/opensearch.yaml | 2 +- .../dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar | Bin 1118870 -> 1118870 bytes .../1.8.1/dbrepo-core-1.8.1.jar.md5 | 2 +- .../1.8.1/dbrepo-core-1.8.1.jar.sha1 | 2 +- .../ifs/dbrepo/dbrepo-core/maven-metadata.xml | 2 +- .../dbrepo/dbrepo-core/maven-metadata.xml.md5 | 2 +- .../dbrepo-core/maven-metadata.xml.sha1 | 2 +- dbrepo-logging-service/dbrepo_parser.conf | 35 + dbrepo-logging-service/default.conf | 37 +- .../dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar | Bin 1118870 -> 1118870 bytes .../1.8.1/dbrepo-core-1.8.1.jar.md5 | 2 +- .../1.8.1/dbrepo-core-1.8.1.jar.sha1 | 2 +- .../ifs/dbrepo/dbrepo-core/maven-metadata.xml | 2 +- .../dbrepo/dbrepo-core/maven-metadata.xml.md5 | 2 +- .../dbrepo-core/maven-metadata.xml.sha1 | 2 +- dbrepo-search-service/app.py | 2 +- dbrepo-search-service/init.py | 2 +- docker-compose.yml | 114 ++- helm/dbrepo/files/create-event-listener.jar | Bin 10140 -> 10142 bytes 25 files changed, 870 insertions(+), 49 deletions(-) create mode 100644 dbrepo-dashboard-ui/dashboards/System/logging.json create mode 100644 dbrepo-logging-service/dbrepo_parser.conf diff --git a/.env b/.env index e50d4f6b5b..efc3a33939 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ MARIADB_VERSION=11.3.2 POSTGRES_VERSION=17.0.0 KEYCLOAK_VERSION=26.0.4 RABBITMQ_VERSION=3.13.7 -OPENSEARCH_VERSION=2.10.0 +OPENSEARCH_VERSION=2.19.0 NGINX_VERSION=1.27.3-alpine3.20-slim OPENLDAP_VERSION=2.6.8 SEAWEEDFS_VERSION=3.71.0 diff --git a/dbrepo-analyse-service/app.py b/dbrepo-analyse-service/app.py index 41e4c128d9..6dd0c082a6 100644 --- a/dbrepo-analyse-service/app.py +++ b/dbrepo-analyse-service/app.py @@ -28,7 +28,7 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', }, }, 'handlers': {'wsgi': { diff --git a/dbrepo-dashboard-service/app.py b/dbrepo-dashboard-service/app.py index fafca139f4..76780711ae 100644 --- a/dbrepo-dashboard-service/app.py +++ b/dbrepo-dashboard-service/app.py @@ -29,7 +29,7 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', }, }, 'handlers': {'wsgi': { diff --git a/dbrepo-dashboard-service/init.py b/dbrepo-dashboard-service/init.py index 54c01f55eb..12d8c24012 100644 --- a/dbrepo-dashboard-service/init.py +++ b/dbrepo-dashboard-service/init.py @@ -18,7 +18,7 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', }, }, 'handlers': {'wsgi': { diff --git a/dbrepo-dashboard-ui/dashboards/System/dbrepo.json b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json index 6ce787d456..e9d03fd40d 100644 --- a/dbrepo-dashboard-ui/dashboards/System/dbrepo.json +++ b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json @@ -30,7 +30,7 @@ "title": "Docs", "tooltip": "", "type": "link", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/" } ], "panels": [ @@ -2428,7 +2428,8 @@ "gateway", "analyse", "metrics", - "auth" + "auth", + "search" ], "templating": { "list": [] diff --git a/dbrepo-dashboard-ui/dashboards/System/logging.json b/dbrepo-dashboard-ui/dashboards/System/logging.json new file mode 100644 index 0000000000..342894446a --- /dev/null +++ b/dbrepo-dashboard-ui/dashboards/System/logging.json @@ -0,0 +1,694 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 5, + "panels": [], + "title": "HTTP Gateway", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "request.method" + }, + "properties": [ + { + "id": "custom.width" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 7, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.5.3", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "@timestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "container_name: \"/dbrepo-gateway-service\" AND code: >=400", + "queryType": "lucene", + "refId": "A", + "timeField": "@timestamp" + } + ], + "title": "HTTP Gateway Errors", + "transformations": [ + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "code", + "method", + "path", + "size" + ] + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "code": 2, + "method": 0, + "path": 1, + "size": 3 + }, + "renameByName": { + "@timestamp": "", + "code": "response.status", + "method": "request.method", + "path": "request.url", + "size": "body.size" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "Count", + "mode": "reduceRow", + "reduce": { + "include": [ + "request.url", + "response.status" + ], + "reducer": "distinctCount" + }, + "replaceFields": false + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Count" + } + ] + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Count", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "200" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "200s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "300" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "300s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "400" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "400s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "500" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "500s" + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 3, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "normal", + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 100 + }, + "pluginVersion": "11.5.3", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "container_name: \"/dbrepo-gateway-service\" AND code: (>=200 AND <300)", + "queryType": "lucene", + "refId": "200", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "container_name: \"/dbrepo-gateway-service\" AND code: (>=300 AND <400)", + "queryType": "lucene", + "refId": "300", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "container_name: \"/dbrepo-gateway-service\" AND code: (>=400 AND <500)", + "queryType": "lucene", + "refId": "400", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "container_name: \"/dbrepo-gateway-service\" AND code: >=500", + "queryType": "lucene", + "refId": "500", + "timeField": "@timestamp" + } + ], + "title": "HTTP Status Codes over Time", + "type": "barchart" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 6, + "panels": [], + "title": "Application", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "warn" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "error" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 1, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": false + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 100 + }, + "pluginVersion": "11.5.3", + "targets": [ + { + "alias": "sdfsdf", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "hide": false, + "id": "1", + "type": "count" + } + ], + "query": "level: WARN", + "queryType": "lucene", + "refId": "warn", + "timeField": "@timestamp" + }, + { + "alias": "adadas", + "bucketAggs": [ + { + "field": "@timestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "level: ERROR", + "queryType": "lucene", + "refId": "error", + "timeField": "@timestamp" + } + ], + "title": "Errors and Warnings over Time", + "type": "barchart" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [ + "ui", + "dashboard", + "metadata", + "data", + "gateway", + "analyse", + "metrics", + "auth", + "search" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Logging", + "uid": "aejhojr0mrpj4c", + "version": 23, + "weekStart": "" +} \ No newline at end of file diff --git a/dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml b/dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml index 4fd59bf382..7a589eafa6 100644 --- a/dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml +++ b/dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml @@ -10,5 +10,5 @@ datasources: flavor: "opensearch" logLevelField: "level" logMessageField: "message" - timeField: "@time" + timeField: "@timestamp" version: "2.10.0" diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar index bcbe378ccfc3fc47f00d0955893325afe482a6b8..b77e2f543a3afa336eaca712c024ed709e85a306 100644 GIT binary patch delta 12739 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 U1R!R8gVJGwg2zGP@<M{;0CqpB1^@s6 delta 12739 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 diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 index 45f12e6b49..ef7ffe9dc4 100644 --- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 +++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 @@ -1 +1 @@ -dd9863e47bad7b44d48640513a8a3d4b \ No newline at end of file +4bb9c10ee8dcc4f05fef0928ec526b5b \ No newline at end of file diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 index 1d0cc7569e..d99c5b6b1d 100644 --- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 +++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 @@ -1 +1 @@ -8ade955fe62f8e6cd809f37f3479ddc843882bce \ No newline at end of file +f4bc86db3f023f2b9481db399c6d439ba41e5272 \ No newline at end of file diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml index a480540488..773bc1fbaa 100644 --- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml +++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml @@ -7,6 +7,6 @@ <versions> <version>1.8.1</version> </versions> - <lastUpdated>20250420103842</lastUpdated> + <lastUpdated>20250420181800</lastUpdated> </versioning> </metadata> diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 index 4f96650e0d..5e3334d999 100644 --- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 +++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 @@ -1 +1 @@ -779db7a879fe20234417cce3fa298472 \ No newline at end of file +c77e7629604adca32895fd22fcf85f37 \ No newline at end of file diff --git a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 index 225b84bd3b..56cd8f8a15 100644 --- a/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 +++ b/dbrepo-data-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 @@ -1 +1 @@ -1caca64fae673f34667cdb4bda7f739ba9144748 \ No newline at end of file +33a845a4d64bc82da3fb93f817539603aa7a159d \ No newline at end of file diff --git a/dbrepo-logging-service/dbrepo_parser.conf b/dbrepo-logging-service/dbrepo_parser.conf new file mode 100644 index 0000000000..7c680629f8 --- /dev/null +++ b/dbrepo-logging-service/dbrepo_parser.conf @@ -0,0 +1,35 @@ +[PARSER] + # https://rubular.com/r/u029eqdrtxeOT9 + Name java + Format regex + Regex (?<time>[^ ]* {1,2}[^ ]*) (?<level>[^ ]*) *(?<message>.*)$ + Time_Key time + Time_Format %Y-%m-%d %H:%M:%S,%L + Time_Keep On + +[PARSER] + # https://rubular.com/r/JqOp74qykhKeBJ + Name gunicorn + Format regex + Regex \[(?<time>[^ ]* {1,2}[^ ]*)\] \[(?<level>[a-zA-Z]+)\] *(?<message>.*)$ + Time_Key time + Time_Format %Y-%m-%d %H:%M:%S %z + Time_Keep On + +[PARSER] + # https://rubular.com/r/bqLY5HuZfP07p3 + Name seaweedfs + Format regex + Regex (?<i>I[0-9]*) (?<time>[^ ]*) (?<golocation>[a-z0-9_\.:]*) (?<message>.*) + Time_Key time + Time_Format %H:%M:%S.%L + Time_Keep On + +[PARSER] + # https://rubular.com/r/SMa7y7BTOOgf9z + Name openldap + Format regex + Regex (?<rnd>[^ ]*) (?<register>[^ ]*) conn=(?<conn>[0-9]+) op=(?<op>[^ ]*) (?<message>.*) + Time_Key time + Time_Format %H:%M:%S.%L + Time_Keep On diff --git a/dbrepo-logging-service/default.conf b/dbrepo-logging-service/default.conf index eb1156e3c3..8b5af1493a 100644 --- a/dbrepo-logging-service/default.conf +++ b/dbrepo-logging-service/default.conf @@ -3,6 +3,7 @@ Daemon Off Log_Level debug Parsers_File parsers.conf + Parsers_File dbrepo_parser.conf [INPUT] Name forward @@ -11,8 +12,40 @@ [FILTER] Name parser - Parser docker - Match * + Parser nginx + Match nginx.* + Key_Name log + Reserve_Data On + Preserve_Key On + +[FILTER] + Name parser + Parser java + Match java.* + Key_Name log + Reserve_Data On + Preserve_Key On + +[FILTER] + Name parser + Parser gunicorn + Match python.* + Key_Name log + Reserve_Data On + Preserve_Key On + +[FILTER] + Name parser + Parser seaweedfs + Match seaweedfs.* + Key_Name log + Reserve_Data On + Preserve_Key On + +[FILTER] + Name parser + Parser openldap + Match openldap.* Key_Name log Reserve_Data On Preserve_Key On diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar index bcbe378ccfc3fc47f00d0955893325afe482a6b8..b77e2f543a3afa336eaca712c024ed709e85a306 100644 GIT binary patch delta 12739 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 U1R!R8gVJGwg2zGP@<M{;0CqpB1^@s6 delta 12739 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 diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 index 45f12e6b49..ef7ffe9dc4 100644 --- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 +++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.md5 @@ -1 +1 @@ -dd9863e47bad7b44d48640513a8a3d4b \ No newline at end of file +4bb9c10ee8dcc4f05fef0928ec526b5b \ No newline at end of file diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 index 1d0cc7569e..d99c5b6b1d 100644 --- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 +++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/1.8.1/dbrepo-core-1.8.1.jar.sha1 @@ -1 +1 @@ -8ade955fe62f8e6cd809f37f3479ddc843882bce \ No newline at end of file +f4bc86db3f023f2b9481db399c6d439ba41e5272 \ No newline at end of file diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml index 0c7daa29ab..a0a6c1a096 100644 --- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml +++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml @@ -7,6 +7,6 @@ <versions> <version>1.8.1</version> </versions> - <lastUpdated>20250420103843</lastUpdated> + <lastUpdated>20250420181801</lastUpdated> </versioning> </metadata> diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 index 614bd5caf1..da7a315b7d 100644 --- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 +++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.md5 @@ -1 +1 @@ -89409a86b1aa8f975e87a5a57220ef58 \ No newline at end of file +9690000f3e5e3480a1e848c01b121660 \ No newline at end of file diff --git a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 index 23f1f5b995..0b5454ddc4 100644 --- a/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 +++ b/dbrepo-metadata-service/lib/at/ac/tuwien/ifs/dbrepo/dbrepo-core/maven-metadata.xml.sha1 @@ -1 +1 @@ -f43ca1a24f845bd78c8552fc80003d126ae7e1d8 \ No newline at end of file +7931c7834aa370963a4d31537c24f9aa1dc668d6 \ No newline at end of file diff --git a/dbrepo-search-service/app.py b/dbrepo-search-service/app.py index 5d4f8b09de..ad8d023dd8 100644 --- a/dbrepo-search-service/app.py +++ b/dbrepo-search-service/app.py @@ -29,7 +29,7 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', }, }, 'handlers': {'wsgi': { diff --git a/dbrepo-search-service/init.py b/dbrepo-search-service/init.py index 48a59538e0..c4aef34a47 100644 --- a/dbrepo-search-service/init.py +++ b/dbrepo-search-service/init.py @@ -19,7 +19,7 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', }, }, 'handlers': {'wsgi': { diff --git a/docker-compose.yml b/docker-compose.yml index 75dae591ef..e1fc9f26cf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -57,12 +57,6 @@ x-healthcheck-params: &healthcheck-params timeout: 10s retries: 15 -x-logging-params: &logging-params - driver: fluentd - options: - fluentd-address: 127.0.0.1:24224 - tag: dbrepo - volumes: metadata-db-data: data-db-data: @@ -98,7 +92,10 @@ services: deploy: <<: *resources-micro-hm logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: mariadb.metadata dbrepo-data-db: restart: "no" @@ -124,7 +121,10 @@ services: deploy: <<: *resources-micro-hm logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: mariadb.data dbrepo-auth-db: restart: "no" @@ -149,7 +149,10 @@ services: deploy: <<: *resources-micro logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: postgres.auth dbrepo-auth-service: restart: "no" @@ -192,7 +195,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: keycloak.auth dbrepo-auth-service-init: init: true @@ -222,7 +228,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: python.auth dbrepo-metadata-service: restart: "no" @@ -293,7 +302,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: java.metadata dbrepo-analyse-service: restart: "no" @@ -327,7 +339,10 @@ services: deploy: <<: *resources-micro logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: python.analyse dbrepo-broker-service: restart: "no" @@ -357,7 +372,10 @@ services: deploy: <<: *resources-micro logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: rabbitmq.broker dbrepo-search-db: restart: "no" @@ -406,7 +424,10 @@ services: deploy: <<: *resources-micro logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: python.search dbrepo-ui: restart: "no" @@ -445,7 +466,10 @@ services: extra_hosts: - "localhost:host-gateway" logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: nuxt.ui dbrepo-gateway-service: restart: "no" @@ -479,7 +503,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: nginx.gateway dbrepo-identity-service: restart: "no" @@ -508,7 +535,10 @@ services: deploy: <<: *resources-nano logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: openldap.identity dbrepo-search-service-init: restart: "no" @@ -537,7 +567,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: python.search-init dbrepo-dashboard-service-init: restart: "no" @@ -565,7 +598,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: python.dashboard-init dbrepo-storage-service: restart: "no" @@ -587,7 +623,10 @@ services: deploy: <<: *resources-nano logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: seaweedfs.storage dbrepo-metric-db: restart: "no" @@ -606,7 +645,10 @@ services: deploy: <<: *resources-nano logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: prometheus.metric dbrepo-storage-service-init: restart: "no" @@ -630,7 +672,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: python.storage-init dbrepo-data-service: restart: "no" @@ -684,7 +729,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: java.data dbrepo-dashboard-ui: restart: "no" @@ -718,7 +766,10 @@ services: extra_hosts: - "localhost:host-gateway" logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: opensearch.ui dbrepo-dashboard-service: restart: "no" @@ -747,7 +798,10 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: python.dashboard dbrepo-logging-service: restart: "no" @@ -758,6 +812,7 @@ services: - "24224:24224" volumes: - ./dbrepo-logging-service/default.conf:/opt/bitnami/fluent-bit/conf/fluent-bit.conf + - ./dbrepo-logging-service/dbrepo_parser.conf:/opt/bitnami/fluent-bit/conf/dbrepo_parser.conf deploy: <<: *resources-micro healthcheck: @@ -773,7 +828,7 @@ services: restart: "no" container_name: dbrepo-logging-ui hostname: logging-ui - image: docker.io/bitnami/opensearch-dashboards:2.10.0 + image: docker.io/bitnami/opensearch-dashboards:2.19.0 ports: - "5601:5601" environment: @@ -785,4 +840,7 @@ services: dbrepo-logging-service: condition: service_healthy logging: - <<: *logging-params + driver: fluentd + options: + fluentd-address: 127.0.0.1:24224 + tag: fluentbit.logging diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar index 52b6f4daf4c66a7ddd8c594515069e24e3936fae..37865c8fadb7d281ce560b9b1bcf48df35e4a7e8 100644 GIT binary patch delta 976 zcmbQ^KhIw{z?+#xgn@yBgTZytl&AyKV|SHI6jrQ1?RVHfV2}GL`ycE%%a`~%<%#eG zY*m<gy!LU<imOLfzVY??FK6DWpv5ASvwrX6xgXbrCzQ1I{osyT9zA(;XUCxjx0D2? z)zqE1$yH_Y=G3a*cNaHB`1E&FE`L2q|CDb1orRySUox<8+jWWSMEE2BSy^WyBO~r? zm9e^2(7x?D*ZKO1%HNL${IbbBb?sS>VgB6Yqm64frfhdeEV%wAE9b(6`!(qo@>`O= zIscnK=ltu`b7n5q)4g}zf8V-p&Vs!47dZl$JhFl#3sS6I=enx<e@c<4SS-9>XF>bK z_iWs}X*Pe}bZq~2@MAK25u5K!pZ34DCjWMN=kD5`X#Ys~VfBf}ob~??*sW@d-+pYt zBE|P1llNyywN0tJSJE1gtGvA;pp^Tzp@5y{)eqtp-{LmcTdd!zY?9&Mdi}<0;oOO8 zffN0fi)(eKr%pXG!Pnqi+QlWaQX2wA)Fqd^eERa<=C%9h{Pt~D>DG{buXsyew^=~{ zg>$#L5zjqFP*iX+FmNz1xH2x9yn#`b$z{>x>x_C#u8StKGs%M}4JI`Z6~LqoqH38; zLDUu|Z;(nx=5rwGB6AOu>!Qu^EOVJa^glKpP7uu_P%8*h+^skpL}@5Z;e<!{<fBTK zOs<P2Da$Y}n=Gp=q2RJ;N)!VU5Q4J>7~VRbWt{wwS!8miGLJFH2)G;r0|PUh15)^x zk%1wxL_ffrkx7IZ>a#_YS18NK$T5LsN=nN!Q}fUjJW!TlbesHFSq|h-Srr+^;>nFF zGTNxdpgK?=#okqu8&&K;VR2AJhUq)gWI<-F$(*V@U~l>SW?7}jz`&rxz`)=H*TulF zr13cO<cG{IlPgtu6hPkk|EYPmKNADPHC6@&BNT<9ER*wDOeWuiD&+nr_~#Y}1H(E2 z1_m({g<sev^RY`zmQ~{c`9xbyhKWgFaz2at<N`GV#`%*Ms=0#1U#Q72H7ZW-Ws;tJ qpGj=;8AU#*R}tA#*dydzG6Ms{Mg|53VH7LmCKsryv29WU2?78U=S~9v delta 901 zcmbQ|KgVA>z?+#xgn@yBgMlG!O4M;@orgt?3=C(O7#Kt*-&GQ??+rQ_bXY-PZ@Sw5 z1N;oLOft`$edTDq_S}|h){VW1vnKH61pWSgY0I&Vk5{lKB+CDm%a7z*>|Njyf6(gg ztT{28R~ziutRNsVSGH)Ah^<6XcIwjV4Jv7qm6NW$jJmk<)}^m}OZJ=bHYYFf)@A+W z^~E)r*D|oRHP+j;U9>czTDSh8kY$m(^UKpq0@t2BS#!<Gy^A@rQHh`F@PmyvuU=?4 zxc{f#g8LkipPc{ApELWalDg=lb5G~I|6aY!`}l_2*#<ryY7?@9qaI!;6SC&+oB!ma z!3VeHbu+u;dTPE0WF#Ite7>(Dd%mn~nS%PFz?UgE>^qOymoN1FZuiE$=2Q)TW_^wC z`5RkvUc_eec*uP6Gy6IFSYpAu=c}}5<Vf#pZC(?-QI`4H<QTsCMyL0tzuPZIS+g*I z3#nk;Yj^QbZ;<PhrGYBKrIV)!sRhmv-E>08wDWZ4q+_X5d^ca-+q-uEoZr68?%W5Y z-z(nG*KHQif3fDMv?QB6C{DN-7&sUh7#PzgZ(>ws`kOlWCZisR;$)I%Vn~~;#iRzJ zf|#^HR6Ua^h}y>F4N}6)d=5liX6|8PNZXvqGM9<zZ|Wv?9!{peshjx(Y6U@RdlhGc zC@rNaobZUBd|b&=9>iln0-SKR0K;3yC6ncqB|xTID$6jQo*bsE2;x*K%ZUDFWMD`v z(GT!uWD;S9x;}04DrFgV878pI<Ukc+4Ac2hOm~_5Us(?1EO`|frb4F4{Y<ixqg1#Q z(A}huqH6_6q4ebWDoXNyQ>R4znb+pj#lXPufq{WR1Fn#PVM*iH$q!V_LGG1Qm0>(O z*-SMMWLKxE3{x=6<U$sc$+uN`K+-Q&Wtcv(O%`C6m@Kab7SUCcVPX)NT*#t6xk$}` zX|C+#ekSS3`_(i-2E0;}VX9YzibzeiRTl$$Q`jTqTrvX#!$t-M24NI;$V@I$S7Y0t H1QG-Q1I9Io -- GitLab