diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f72ad00edb3..0f0705c77fe 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -24,6 +24,7 @@ /packages/apache_otel @elastic/obs-infraobs-integrations /packages/apache_spark @elastic/obs-infraobs-integrations /packages/apache_tomcat @elastic/obs-infraobs-integrations +/packages/apache_tomcat_otel @elastic/obs-infraobs-integrations /packages/apm @elastic/obs-ds-intake-services /packages/arista_ngfw @elastic/integration-experience /packages/armis @elastic/security-service-integrations diff --git a/packages/apache_tomcat_otel/_dev/shared/tomcat-jvm-memory-gc.yaml b/packages/apache_tomcat_otel/_dev/shared/tomcat-jvm-memory-gc.yaml new file mode 100644 index 00000000000..7b5a42eae9e --- /dev/null +++ b/packages/apache_tomcat_otel/_dev/shared/tomcat-jvm-memory-gc.yaml @@ -0,0 +1,498 @@ +dashboards: + - id: apache_tomcat_otel-jvm-memory-gc + name: '[Tomcat OTel] JVM Memory & GC' + description: >- + JVM memory management and garbage collection monitoring for Apache Tomcat, + including heap/non-heap usage, G1 memory pools, and GC activity. + + settings: + margins: true + sync: + cursor: true + tooltips: false + colors: false + + controls: + - type: options + label: Host + data_view: metrics-* + field: resource.attributes.host.name + + panels: + # ─── Navigation ─────────────────────────────────────────────────── + - title: Navigation + size: {w: 48, h: 2} + links: + layout: horizontal + items: + - label: Overview + dashboard: apache_tomcat_otel-overview + - label: Request Processing + dashboard: apache_tomcat_otel-request-processing + - label: Thread Pool & Connections + dashboard: apache_tomcat_otel-thread-pool-connections + - label: JVM Memory & GC + dashboard: apache_tomcat_otel-jvm-memory-gc + - label: Sessions & Applications + dashboard: apache_tomcat_otel-sessions-servlets + - label: JVM & OS Resources + dashboard: apache_tomcat_otel-jvm-os-resources + + # ─── Dashboard Overview + KPIs ───────────────────────────────────── + - hide_title: true + size: {w: 16, h: 12} + markdown: + content: | + ## [Tomcat OTel] JVM Memory & GC + + This dashboard monitors JVM memory management and garbage collection: + - Heap and non-heap memory usage, committed and max + - G1 memory pool breakdown (Eden, Survivor, Old Gen) + - Young and Old GC collection counts and pause times + - Memory leak detection via Old Gen usage trends + + # KPI Row 1 (w:8 × 4 = 32) + - title: Heap Used + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL + - STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)) + primary: + field: heap_used + label: Heap Used + format: + type: bytes + + - title: Heap Max + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_max IS NOT NULL + - STATS heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) + primary: + field: heap_max + label: Heap Max + format: + type: bytes + + - title: Non-Heap Used + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_NonHeapMemoryUsage_used IS NOT NULL + - STATS nonheap_used = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_used)) + primary: + field: nonheap_used + label: Non-Heap Used + format: + type: bytes + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Memory Utilization' + + - title: Heap Utilization + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL + - STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) + - EVAL heap_util = CASE(heap_max > 0, heap_used / heap_max, 0) + primary: + field: heap_util + label: Heap Utilization + format: + type: percent + decimals: 1 + + # KPI Row 2 (w:8 × 4 = 32) + - title: Young GC Count + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL + - STATS young_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionCount)) + primary: + field: young_gc + label: Young GC Count + format: + type: number + compact: true + + - title: Old GC Count + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Old_Generation_CollectionCount IS NOT NULL + - STATS old_gc = MAX(LAST_OVER_TIME(java_lang_G1_Old_Generation_CollectionCount)) + primary: + field: old_gc + label: Old GC Count + format: + type: number + compact: true + + - title: Young GC Time + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Young_Generation_CollectionTime IS NOT NULL + - STATS young_gc_time = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionTime)) + primary: + field: young_gc_time + label: Young GC Time + format: + type: number + decimals: 0 + suffix: " ms" + + - title: Last GC Duration + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Young_Generation_LastGcInfo_duration IS NOT NULL + - STATS last_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_LastGcInfo_duration)) + primary: + field: last_gc + label: Last GC Duration + format: + type: number + decimals: 0 + suffix: " ms" + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Heap Memory' + + - title: Heap Memory Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL + - STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_committed)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: heap_used + label: Used + format: + type: bytes + - field: heap_committed + label: Committed + format: + type: bytes + - field: heap_max + label: Max + format: + type: bytes + legend: + visible: show + position: right + + - title: Non-Heap Memory Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_NonHeapMemoryUsage_used IS NOT NULL + - STATS nonheap_used = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_used)), nonheap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: nonheap_used + label: Used + format: + type: bytes + - field: nonheap_committed + label: Committed + format: + type: bytes + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Garbage Collection' + + - title: GC Collection Count Over Time + description: Delta of cumulative GC collection counts per time bucket. + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL + - STATS young_gc = SUM(DELTA(java_lang_G1_Young_Generation_CollectionCount)), old_gc = SUM(DELTA(java_lang_G1_Old_Generation_CollectionCount)), concurrent_gc = SUM(DELTA(java_lang_G1_Concurrent_GC_CollectionCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: young_gc + label: Young GC + format: + type: number + decimals: 0 + - field: old_gc + label: Old GC + format: + type: number + decimals: 0 + - field: concurrent_gc + label: Concurrent GC + format: + type: number + decimals: 0 + color: + palette: eui_amsterdam_color_blind + assignments: + - value: Old GC + color: '#cc5642' + legend: + visible: show + position: right + + - title: GC Cumulative Time Over Time + description: Delta of cumulative GC pause time (ms) per time bucket. + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Young_Generation_CollectionTime IS NOT NULL + - STATS young_time = SUM(DELTA(java_lang_G1_Young_Generation_CollectionTime)), old_time = SUM(DELTA(java_lang_G1_Old_Generation_CollectionTime)), concurrent_time = SUM(DELTA(java_lang_G1_Concurrent_GC_CollectionTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: young_time + label: Young GC Time (ms) + format: + type: number + decimals: 0 + - field: old_time + label: Old GC Time (ms) + format: + type: number + decimals: 0 + - field: concurrent_time + label: Concurrent GC Time (ms) + format: + type: number + decimals: 0 + color: + palette: eui_amsterdam_color_blind + assignments: + - value: Old GC Time (ms) + color: '#cc5642' + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## G1 Memory Pools' + + - title: Eden Space Over Time + size: {w: 16, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Eden_Space_Usage_used IS NOT NULL + - STATS eden_used = MAX(LAST_OVER_TIME(java_lang_G1_Eden_Space_Usage_used)), eden_committed = MAX(LAST_OVER_TIME(java_lang_G1_Eden_Space_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: eden_used + label: Used + format: + type: bytes + - field: eden_committed + label: Committed + format: + type: bytes + legend: + visible: show + position: bottom + + - title: Survivor Space Over Time + size: {w: 16, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Survivor_Space_Usage_used IS NOT NULL + - STATS survivor_used = MAX(LAST_OVER_TIME(java_lang_G1_Survivor_Space_Usage_used)), survivor_committed = MAX(LAST_OVER_TIME(java_lang_G1_Survivor_Space_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: survivor_used + label: Used + format: + type: bytes + - field: survivor_committed + label: Committed + format: + type: bytes + legend: + visible: show + position: bottom + + - title: Old Generation Over Time + description: Old Gen growth without returning to baseline after GC indicates a potential memory leak. + size: {w: 16, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Old_Gen_Usage_used IS NOT NULL + - STATS old_used = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_used)), old_committed = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: old_used + label: Used + format: + type: bytes + - field: old_committed + label: Committed + format: + type: bytes + legend: + visible: show + position: bottom + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Memory Utilization' + + - title: Heap Utilization + size: {w: 24, h: 10} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL + - STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) + - EVAL heap_util = CASE(heap_max > 0, ROUND(heap_used / heap_max * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 85 + metric: + field: heap_util + label: Heap Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 70 + color: '#54b399' + - up_to: 85 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc + + - title: Old Generation Utilization + description: Old Gen utilization trending upward over time suggests a memory leak. + size: {w: 24, h: 10} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Old_Gen_Usage_used IS NOT NULL + - STATS old_used = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_used)), old_max = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_max)) + - EVAL old_util = CASE(old_max > 0, ROUND(old_used / old_max * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 80 + metric: + field: old_util + label: Old Gen Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 60 + color: '#54b399' + - up_to: 80 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc diff --git a/packages/apache_tomcat_otel/_dev/shared/tomcat-jvm-os-resources.yaml b/packages/apache_tomcat_otel/_dev/shared/tomcat-jvm-os-resources.yaml new file mode 100644 index 00000000000..d2a25a4c32e --- /dev/null +++ b/packages/apache_tomcat_otel/_dev/shared/tomcat-jvm-os-resources.yaml @@ -0,0 +1,559 @@ +dashboards: + - id: apache_tomcat_otel-jvm-os-resources + name: '[Tomcat OTel] JVM & OS Resources' + description: >- + JVM threading, CPU utilization, file descriptors, operating system + resource monitoring, and web resource cache performance for the Apache Tomcat JVM process. + + settings: + margins: true + sync: + cursor: true + tooltips: false + colors: false + + controls: + - type: options + label: Host + data_view: metrics-* + field: resource.attributes.host.name + + panels: + # ─── Navigation ─────────────────────────────────────────────────── + - title: Navigation + size: {w: 48, h: 2} + links: + layout: horizontal + items: + - label: Overview + dashboard: apache_tomcat_otel-overview + - label: Request Processing + dashboard: apache_tomcat_otel-request-processing + - label: Thread Pool & Connections + dashboard: apache_tomcat_otel-thread-pool-connections + - label: JVM Memory & GC + dashboard: apache_tomcat_otel-jvm-memory-gc + - label: Sessions & Applications + dashboard: apache_tomcat_otel-sessions-servlets + - label: JVM & OS Resources + dashboard: apache_tomcat_otel-jvm-os-resources + + # ─── Dashboard Overview + KPIs ───────────────────────────────────── + - hide_title: true + size: {w: 12, h: 8} + markdown: + content: | + ## [Tomcat OTel] JVM & OS Resources + + This dashboard monitors JVM and operating system resource consumption: + - Process and system-wide CPU utilization + - System load average + - File descriptor usage and limits + - JVM thread counts (total, daemon, peak) + - Physical memory and swap usage + - Web resource cache hit/miss ratio and utilization + + # KPI Row 1 (w:9 × 4 = 36) + - title: Process CPU + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_ProcessCpuLoad IS NOT NULL + - STATS proc_cpu = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_ProcessCpuLoad)) + primary: + field: proc_cpu + label: Process CPU + format: + type: percent + decimals: 1 + + - title: System CPU + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_CpuLoad IS NOT NULL + - STATS sys_cpu = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_CpuLoad)) + primary: + field: sys_cpu + label: System CPU + format: + type: percent + decimals: 1 + + - title: System Load Avg + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_SystemLoadAverage IS NOT NULL + - STATS load_avg = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_SystemLoadAverage)) + primary: + field: load_avg + label: Load Average (1m) + format: + type: number + decimals: 2 + + - title: Available CPUs + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_AvailableProcessors IS NOT NULL + - STATS cpus = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_AvailableProcessors)) + primary: + field: cpus + label: Available CPUs + format: + type: number + decimals: 0 + + # KPI Row 2 (w:9 × 4 = 36) + - title: Open File Descriptors + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL + - STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)) + primary: + field: open_fds + label: Open FDs + format: + type: number + decimals: 0 + + - title: FD Utilization + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL + - STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount)) + - EVAL fd_util = CASE(max_fds > 0, open_fds / max_fds, 0) + primary: + field: fd_util + label: FD Utilization + format: + type: percent + decimals: 1 + + - title: JVM Threads + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Threading_ThreadCount IS NOT NULL + - STATS thread_count = MAX(LAST_OVER_TIME(java_lang_Threading_ThreadCount)) + primary: + field: thread_count + label: JVM Threads + format: + type: number + decimals: 0 + + - title: Peak Threads + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Threading_PeakThreadCount IS NOT NULL + - STATS peak = MAX(LAST_OVER_TIME(java_lang_Threading_PeakThreadCount)) + primary: + field: peak + label: Peak Threads + format: + type: number + decimals: 0 + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## CPU Utilization' + + - title: CPU Load Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_CpuLoad IS NOT NULL + - STATS system_cpu = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_CpuLoad)), process_cpu = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_ProcessCpuLoad)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - EVAL system_pct = ROUND(system_cpu * 100, 1) + - EVAL process_pct = ROUND(process_cpu * 100, 1) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: system_pct + label: System CPU % + format: + type: number + decimals: 1 + suffix: "%" + - field: process_pct + label: Process CPU % + format: + type: number + decimals: 1 + suffix: "%" + legend: + visible: show + position: right + + - title: System Load Average Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_SystemLoadAverage IS NOT NULL + - STATS load_avg = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_SystemLoadAverage)), cpus = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_AvailableProcessors)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: load_avg + label: Load Average (1m) + format: + type: number + decimals: 2 + - field: cpus + label: Available CPUs + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## File Descriptors' + + - title: File Descriptor Usage Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL + - STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: open_fds + label: Open FDs + format: + type: number + decimals: 0 + - field: max_fds + label: Max FDs + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - title: File Descriptor Utilization + size: {w: 24, h: 12} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL + - STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount)) + - EVAL fd_util = CASE(max_fds > 0, ROUND(open_fds / max_fds * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 80 + metric: + field: fd_util + label: FD Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 50 + color: '#54b399' + - up_to: 80 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## JVM Threads' + + - title: JVM Thread Count Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Threading_ThreadCount IS NOT NULL + - STATS total = MAX(LAST_OVER_TIME(java_lang_Threading_ThreadCount)), daemon = MAX(LAST_OVER_TIME(java_lang_Threading_DaemonThreadCount)), peak = MAX(LAST_OVER_TIME(java_lang_Threading_PeakThreadCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: total + label: Total + format: + type: number + decimals: 0 + - field: daemon + label: Daemon + format: + type: number + decimals: 0 + - field: peak + label: Peak + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - title: New Threads Started Over Time + description: Delta of cumulative TotalStartedThreadCount per time bucket. + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Threading_TotalStartedThreadCount IS NOT NULL + - STATS new_threads = SUM(DELTA(java_lang_Threading_TotalStartedThreadCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: new_threads + label: New Threads + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## System Memory' + + - title: System Memory Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_FreeMemorySize IS NOT NULL + - STATS free_mem = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_FreeMemorySize)), total_mem = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_TotalMemorySize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: free_mem + label: Free Memory + format: + type: bytes + - field: total_mem + label: Total Memory + format: + type: bytes + legend: + visible: show + position: right + + - title: Swap Space Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_OperatingSystem_FreeSwapSpaceSize IS NOT NULL + - STATS free_swap = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_FreeSwapSpaceSize)), total_swap = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_TotalSwapSpaceSize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: free_swap + label: Free Swap + format: + type: bytes + - field: total_swap + label: Total Swap + format: + type: bytes + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Resource Cache' + + - title: Cache Hit / Miss Ratio Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_WebResourceRoot_hitCount IS NOT NULL + - STATS hits = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_hitCount)), lookups = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_lookupCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - EVAL hit_pct = CASE(lookups > 0, ROUND(hits / lookups * 100, 1), 0) + - EVAL miss_pct = CASE(lookups > 0, ROUND((lookups - hits) / lookups * 100, 1), 0) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: hit_pct + label: Hit % + format: + type: number + decimals: 1 + suffix: "%" + - field: miss_pct + label: Miss % + format: + type: number + decimals: 1 + suffix: "%" + legend: + visible: show + position: right + + - title: Cache Size vs Max Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_WebResourceRoot_size IS NOT NULL + - STATS cache_size = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_size)), max_size = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_maxSize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: cache_size + label: Current Size + format: + type: number + decimals: 0 + - field: max_size + label: Max Size + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - title: Cache Lookup Rate Over Time + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_WebResourceRoot_lookupCount IS NOT NULL + - STATS lookups = SUM(DELTA(Catalina_WebResourceRoot_lookupCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: lookups + label: Lookups + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - title: Cache Hit Ratio + hide_title: true + size: {w: 24, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_WebResourceRoot_hitCount IS NOT NULL + - STATS hits = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_hitCount)), lookups = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_lookupCount)) + - EVAL hit_ratio = CASE(lookups > 0, ROUND(hits / lookups * 100, 1), 0) + primary: + field: hit_ratio + label: Hit Ratio + format: + type: number + decimals: 1 + suffix: "%" + + - title: Cache Entries + hide_title: true + size: {w: 24, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_WebResourceRoot_size IS NOT NULL + - STATS entries = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_size)) + primary: + field: entries + label: Entries + format: + type: number + decimals: 0 diff --git a/packages/apache_tomcat_otel/_dev/shared/tomcat-overview.yaml b/packages/apache_tomcat_otel/_dev/shared/tomcat-overview.yaml new file mode 100644 index 00000000000..ca908fe1816 --- /dev/null +++ b/packages/apache_tomcat_otel/_dev/shared/tomcat-overview.yaml @@ -0,0 +1,475 @@ +dashboards: + - id: apache_tomcat_otel-overview + name: '[Tomcat OTel] Overview' + description: >- + High-level health and performance overview for Apache Tomcat, + covering golden signals: latency, traffic, errors, and saturation. + + settings: + margins: true + sync: + cursor: true + tooltips: false + colors: false + + controls: + - type: options + label: Host + data_view: metrics-* + field: resource.attributes.host.name + + panels: + # ─── Navigation ─────────────────────────────────────────────────── + - title: Navigation + size: {w: 48, h: 2} + links: + layout: horizontal + items: + - label: Overview + dashboard: apache_tomcat_otel-overview + - label: Request Processing + dashboard: apache_tomcat_otel-request-processing + - label: Thread Pool & Connections + dashboard: apache_tomcat_otel-thread-pool-connections + - label: JVM Memory & GC + dashboard: apache_tomcat_otel-jvm-memory-gc + - label: Sessions & Applications + dashboard: apache_tomcat_otel-sessions-servlets + - label: JVM & OS Resources + dashboard: apache_tomcat_otel-jvm-os-resources + + # ─── Dashboard Overview + KPIs ───────────────────────────────────── + - hide_title: true + size: {w: 16, h: 12} + markdown: + content: | + ## [Tomcat OTel] Overview + + This dashboard provides a high-level view of Apache Tomcat health and performance: + - Request throughput, error rates, and average latency + - Thread pool and connection utilization + - JVM heap memory consumption + - HTTP session counts and GC activity + + # KPI Row 1 (w:8 × 4 = 32, beside overview) + - title: Total Requests + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS total_requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)) + primary: + field: total_requests + label: Total Requests + format: + type: number + compact: true + + - title: Error Rate + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount)) + - EVAL error_rate = CASE(requests > 0, errors / requests, 0) + primary: + field: error_rate + label: Error Rate + format: + type: percent + decimals: 2 + + - title: Avg Latency + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL + - STATS proc_time = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), req_count = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)) + - EVAL avg_latency = CASE(req_count > 0, ROUND(proc_time / req_count, 1), 0) + primary: + field: avg_latency + label: Avg Latency (ms) + format: + type: number + decimals: 1 + suffix: " ms" + + - title: Active Sessions + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_activeSessions IS NOT NULL + - STATS active_sessions = SUM(LAST_OVER_TIME(Catalina_Manager_activeSessions)) + primary: + field: active_sessions + label: Active Sessions + format: + type: number + compact: true + + # KPI Row 2 (w:8 × 4 = 32, beside overview) + - title: Thread Utilization + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) + - EVAL thread_util = CASE(max_threads > 0, busy / max_threads, 0) + primary: + field: thread_util + label: Thread Utilization + format: + type: percent + decimals: 1 + + - title: Heap Utilization + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL + - STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) + - EVAL heap_util = CASE(heap_max > 0, heap_used / heap_max, 0) + primary: + field: heap_util + label: Heap Utilization + format: + type: percent + decimals: 1 + + - title: Young GC Collections + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL + - STATS young_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionCount)) + primary: + field: young_gc + label: Young GC Collections + format: + type: number + compact: true + + - title: JVM Uptime + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Runtime_Uptime IS NOT NULL + - STATS uptime_ms = MAX(LAST_OVER_TIME(java_lang_Runtime_Uptime)) + - EVAL uptime_s = ROUND(uptime_ms / 1000, 0) + primary: + field: uptime_s + label: JVM Uptime + format: + type: duration + decimals: 0 + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Golden Signals' + + - title: Request Throughput Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS requests = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: requests + label: Requests + format: + type: number + decimals: 0 + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - title: Error Count Over Time + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL + - STATS errors = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: errors + label: Errors + format: + type: number + decimals: 0 + breakdown: + field: attributes.name + color: + palette: eui_amsterdam_color_blind + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Resource Utilization' + + - title: Thread Pool Utilization Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - EVAL utilization = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: utilization + label: Utilization % + format: + type: number + decimals: 1 + suffix: "%" + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - title: Heap Memory Usage Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: unstacked + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL + - STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_committed)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: heap_used + label: Used + format: + type: bytes + - field: heap_committed + label: Committed + format: + type: bytes + - field: heap_max + label: Max + format: + type: bytes + legend: + visible: show + position: right + + - title: Thread Pool Utilization + size: {w: 16, h: 10} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) + - EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 80 + metric: + field: thread_util + label: Thread Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 60 + color: '#54b399' + - up_to: 80 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc + + - title: Connection Utilization + size: {w: 16, h: 10} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_connectionCount IS NOT NULL + - STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) + - EVAL conn_util = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 80 + metric: + field: conn_util + label: Connection Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 50 + color: '#54b399' + - up_to: 80 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc + + - title: Heap Utilization + size: {w: 16, h: 10} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL + - STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) + - EVAL heap_util = CASE(heap_max > 0, ROUND(heap_used / heap_max * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 85 + metric: + field: heap_util + label: Heap Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 70 + color: '#54b399' + - up_to: 85 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Connector Summary' + + - title: Connector Performance Summary + size: {w: 48, h: 15} + esql: + type: datatable + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS requests = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount)), bytes_sent = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesSent)), bytes_recv = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesReceived)), proc_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime)) BY attributes.name + - EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0) + - EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0) + - SORT requests DESC + breakdowns: + - field: attributes.name + label: Connector + metrics: + - field: requests + label: Requests + format: + type: number + - field: errors + label: Errors + format: + type: number + - field: error_pct + label: Error % + format: + type: number + decimals: 2 + suffix: "%" + - field: avg_latency + label: Avg Latency (ms) + format: + type: number + decimals: 1 + - field: max_time + label: Max Time (ms) + format: + type: number + decimals: 0 + - field: bytes_sent + label: Bytes Sent + format: + type: bytes + - field: bytes_recv + label: Bytes Received + format: + type: bytes diff --git a/packages/apache_tomcat_otel/_dev/shared/tomcat-request-processing.yaml b/packages/apache_tomcat_otel/_dev/shared/tomcat-request-processing.yaml new file mode 100644 index 00000000000..97223810fcd --- /dev/null +++ b/packages/apache_tomcat_otel/_dev/shared/tomcat-request-processing.yaml @@ -0,0 +1,447 @@ +dashboards: + - id: apache_tomcat_otel-request-processing + name: '[Tomcat OTel] Request Processing' + description: >- + Detailed request processing pipeline metrics including per-connector + throughput, latency, error rates, and per-servlet performance. + + settings: + margins: true + sync: + cursor: true + tooltips: false + colors: false + + controls: + - type: options + label: Host + data_view: metrics-* + field: resource.attributes.host.name + + panels: + # ─── Navigation ─────────────────────────────────────────────────── + - title: Navigation + size: {w: 48, h: 2} + links: + layout: horizontal + items: + - label: Overview + dashboard: apache_tomcat_otel-overview + - label: Request Processing + dashboard: apache_tomcat_otel-request-processing + - label: Thread Pool & Connections + dashboard: apache_tomcat_otel-thread-pool-connections + - label: JVM Memory & GC + dashboard: apache_tomcat_otel-jvm-memory-gc + - label: Sessions & Applications + dashboard: apache_tomcat_otel-sessions-servlets + - label: JVM & OS Resources + dashboard: apache_tomcat_otel-jvm-os-resources + + # ─── Dashboard Overview + KPIs ───────────────────────────────────── + - hide_title: true + size: {w: 16, h: 12} + markdown: + content: | + ## [Tomcat OTel] Request Processing + + This dashboard provides detailed request processing pipeline metrics: + - Per-connector request rates and throughput + - Bytes sent and received over time + - Request latency and maximum processing time + - Per-servlet and per-web-module performance breakdown + + # KPI Row 1 (w:8 × 4 = 32) + - title: Total Requests + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS total_requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)) + primary: + field: total_requests + label: Total Requests + format: + type: number + compact: true + + - title: Total Errors + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL + - STATS total_errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount)) + primary: + field: total_errors + label: Total Errors + format: + type: number + compact: true + + - title: Bytes Sent + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_bytesSent IS NOT NULL + - STATS total_sent = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesSent)) + primary: + field: total_sent + label: Bytes Sent + format: + type: bytes + + - title: Bytes Received + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_bytesReceived IS NOT NULL + - STATS total_recv = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesReceived)) + primary: + field: total_recv + label: Bytes Received + format: + type: bytes + + # KPI Row 2 (w:8 × 4 = 32) + - title: Error Rate + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount)) + - EVAL error_rate = CASE(requests > 0, errors / requests, 0) + primary: + field: error_rate + label: Error Rate + format: + type: percent + decimals: 2 + + - title: Max Processing Time + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_maxTime IS NOT NULL + - STATS max_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime)) + primary: + field: max_time + label: Max Processing Time + format: + type: number + decimals: 0 + suffix: " ms" + + - title: Avg Latency + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL + - STATS proc_time = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), req_count = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)) + - EVAL avg_latency = CASE(req_count > 0, ROUND(proc_time / req_count, 1), 0) + primary: + field: avg_latency + label: Avg Latency + format: + type: number + decimals: 1 + suffix: " ms" + + - title: Active Connectors + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - FROM metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS active_connectors = COUNT_DISTINCT(attributes.name) + primary: + field: active_connectors + label: Active Connectors + format: + type: number + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Request Throughput' + + - title: Request Rate by Connector + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS requests = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: requests + label: Requests + format: + type: number + decimals: 0 + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - title: Bytes Transferred Over Time + size: {w: 24, h: 12} + esql: + type: area + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_bytesSent IS NOT NULL + - STATS bytes_sent = SUM(DELTA(Catalina_GlobalRequestProcessor_bytesSent)), bytes_recv = SUM(DELTA(Catalina_GlobalRequestProcessor_bytesReceived)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: bytes_sent + label: Bytes Sent + format: + type: bytes + - field: bytes_recv + label: Bytes Received + format: + type: bytes + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Request Latency' + + - title: Average Latency Over Time + description: Derived from cumulative processingTime / requestCount delta per bucket. + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL + - STATS proc_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_processingTime)), req_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - EVAL avg_latency = CASE(req_delta > 0, ROUND(proc_delta / req_delta, 1), 0) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: avg_latency + label: Avg Latency (ms) + format: + type: number + decimals: 1 + suffix: " ms" + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - title: Max Request Processing Time Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_maxTime IS NOT NULL + - STATS max_time = MAX(MAX_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: max_time + label: Max Time (ms) + format: + type: number + decimals: 0 + suffix: " ms" + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Error Analysis' + + - title: Error Count Over Time by Connector + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL + - STATS errors = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: errors + label: Errors + format: + type: number + decimals: 0 + breakdown: + field: attributes.name + color: + palette: eui_amsterdam_color_blind + legend: + visible: show + position: right + + - title: Error Rate % Over Time + description: Percentage of requests resulting in errors per time bucket. + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL + - STATS req_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)), err_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - EVAL error_pct = CASE(req_delta > 0, ROUND(err_delta / req_delta * 100, 2), 0) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: error_pct + label: Error Rate % + format: + type: number + decimals: 2 + suffix: "%" + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Servlet & Application Detail' + + - title: Servlet Performance Summary + size: {w: 24, h: 15} + esql: + type: datatable + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Servlet_requestCount IS NOT NULL + - STATS requests = MAX(LAST_OVER_TIME(Catalina_Servlet_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_Servlet_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_Servlet_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_Servlet_maxTime)), min_time = MAX(LAST_OVER_TIME(Catalina_Servlet_minTime)) BY attributes.name, attributes.WebModule + - EVAL min_time_display = CASE(min_time > 9.0E18, null, min_time) + - EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0) + - EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0) + - SORT requests DESC + breakdowns: + - field: attributes.name + label: Servlet + - field: attributes.WebModule + label: Web Module + metrics: + - field: requests + label: Requests + format: + type: number + - field: errors + label: Errors + format: + type: number + - field: error_pct + label: Error % + format: + type: number + decimals: 2 + suffix: "%" + - field: avg_latency + label: Avg Latency (ms) + format: + type: number + decimals: 1 + - field: max_time + label: Max Time (ms) + format: + type: number + decimals: 0 + + - title: Web Module Performance Summary + size: {w: 24, h: 15} + esql: + type: datatable + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_WebModule_requestCount IS NOT NULL + - STATS requests = MAX(LAST_OVER_TIME(Catalina_WebModule_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_WebModule_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_WebModule_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_WebModule_maxTime)), startup_time = MAX(LAST_OVER_TIME(Catalina_WebModule_startupTime)) BY attributes.name + - EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0) + - EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0) + - SORT requests DESC + breakdowns: + - field: attributes.name + label: Web Module + metrics: + - field: requests + label: Requests + format: + type: number + - field: errors + label: Errors + format: + type: number + - field: error_pct + label: Error % + format: + type: number + decimals: 2 + suffix: "%" + - field: avg_latency + label: Avg Latency (ms) + format: + type: number + decimals: 1 + - field: max_time + label: Max Time (ms) + format: + type: number + decimals: 0 + - field: startup_time + label: Startup Time (ms) + format: + type: number + decimals: 0 diff --git a/packages/apache_tomcat_otel/_dev/shared/tomcat-sessions-servlets.yaml b/packages/apache_tomcat_otel/_dev/shared/tomcat-sessions-servlets.yaml new file mode 100644 index 00000000000..df8fe9cb015 --- /dev/null +++ b/packages/apache_tomcat_otel/_dev/shared/tomcat-sessions-servlets.yaml @@ -0,0 +1,536 @@ +dashboards: + - id: apache_tomcat_otel-sessions-servlets + name: '[Tomcat OTel] Sessions & Applications' + description: >- + HTTP session lifecycle, per-application performance monitoring, servlet detail, + and authentication failure tracking for Apache Tomcat web applications. + + settings: + margins: true + sync: + cursor: true + tooltips: false + colors: false + + controls: + - type: options + label: Host + data_view: metrics-* + field: resource.attributes.host.name + + panels: + # ─── Navigation ─────────────────────────────────────────────────── + - title: Navigation + size: {w: 48, h: 2} + links: + layout: horizontal + items: + - label: Overview + dashboard: apache_tomcat_otel-overview + - label: Request Processing + dashboard: apache_tomcat_otel-request-processing + - label: Thread Pool & Connections + dashboard: apache_tomcat_otel-thread-pool-connections + - label: JVM Memory & GC + dashboard: apache_tomcat_otel-jvm-memory-gc + - label: Sessions & Applications + dashboard: apache_tomcat_otel-sessions-servlets + - label: JVM & OS Resources + dashboard: apache_tomcat_otel-jvm-os-resources + + # ─── Dashboard Overview + KPIs ───────────────────────────────────── + - hide_title: true + size: {w: 12, h: 8} + markdown: + content: | + ## [Tomcat OTel] Sessions & Applications + + This dashboard monitors HTTP session lifecycle and per-application health: + - Active, created, expired, and rejected session counts + - Session creation and expiration rates + - Per-context session management details + - Servlet-level request processing and error breakdown + - Authentication failure tracking + + # KPI Row 1 (w:9 × 4 = 36) + - title: Active Sessions + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_activeSessions IS NOT NULL + - STATS active_sessions = SUM(LAST_OVER_TIME(Catalina_Manager_activeSessions)) + primary: + field: active_sessions + label: Active Sessions + format: + type: number + compact: true + + - title: Total Created + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_sessionCounter IS NOT NULL + - STATS sessions_created = SUM(LAST_OVER_TIME(Catalina_Manager_sessionCounter)) + primary: + field: sessions_created + label: Total Created + format: + type: number + compact: true + + - title: Expired Sessions + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_expiredSessions IS NOT NULL + - STATS expired = SUM(LAST_OVER_TIME(Catalina_Manager_expiredSessions)) + primary: + field: expired + label: Expired Sessions + format: + type: number + compact: true + + - title: Rejected Sessions + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_rejectedSessions IS NOT NULL + - STATS rejected = SUM(LAST_OVER_TIME(Catalina_Manager_rejectedSessions)) + primary: + field: rejected + label: Rejected Sessions + format: + type: number + compact: true + + # KPI Row 2 (w:9 × 4 = 36) + - title: Session Create Rate + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_sessionCreateRate IS NOT NULL + - STATS create_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCreateRate)) + primary: + field: create_rate + label: Create Rate + format: + type: number + decimals: 1 + suffix: "/s" + + - title: Avg Session Lifetime + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_sessionAverageAliveTime IS NOT NULL + - STATS avg_lifetime = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime)) + primary: + field: avg_lifetime + label: Avg Lifetime + format: + type: number + decimals: 0 + suffix: " s" + + - title: Max Session Lifetime + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_sessionMaxAliveTime IS NOT NULL + - STATS max_lifetime = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime)) + primary: + field: max_lifetime + label: Max Lifetime + format: + type: number + decimals: 0 + suffix: " s" + + - title: Peak Active Sessions + hide_title: true + size: {w: 9, h: 4} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_maxActive IS NOT NULL + - STATS peak_active = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive)) + primary: + field: peak_active + label: Peak Active + format: + type: number + compact: true + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Session Lifecycle' + + - title: Active Sessions Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_activeSessions IS NOT NULL + - STATS active = MAX(LAST_OVER_TIME(Catalina_Manager_activeSessions)), peak = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: active + label: Active Sessions + format: + type: number + decimals: 0 + - field: peak + label: Peak Active + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - title: Session Create & Expire Rate Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_sessionCreateRate IS NOT NULL + - STATS create_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCreateRate)), expire_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionExpireRate)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: create_rate + label: Create Rate (/s) + format: + type: number + decimals: 2 + - field: expire_rate + label: Expire Rate (/s) + format: + type: number + decimals: 2 + legend: + visible: show + position: right + + - title: Session Events Over Time + description: New sessions created, expired, and rejected per time bucket. + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_sessionCounter IS NOT NULL + - STATS created = SUM(DELTA(Catalina_Manager_sessionCounter)), expired = SUM(DELTA(Catalina_Manager_expiredSessions)), rejected = SUM(DELTA(Catalina_Manager_rejectedSessions)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: created + label: Created + format: + type: number + decimals: 0 + - field: expired + label: Expired + format: + type: number + decimals: 0 + - field: rejected + label: Rejected + format: + type: number + decimals: 0 + color: + palette: eui_amsterdam_color_blind + assignments: + - value: Rejected + color: '#cc5642' + legend: + visible: show + position: right + + - title: Avg Session Lifetime Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_sessionAverageAliveTime IS NOT NULL + - STATS avg_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime)), max_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: avg_alive + label: Avg Lifetime (s) + format: + type: number + decimals: 0 + suffix: " s" + - field: max_alive + label: Max Lifetime (s) + format: + type: number + decimals: 0 + suffix: " s" + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Per-Application Detail' + + - title: Application Session Summary + size: {w: 48, h: 13} + esql: + type: datatable + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Manager_activeSessions IS NOT NULL + - STATS active = MAX(LAST_OVER_TIME(Catalina_Manager_activeSessions)), created = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCounter)), expired = MAX(LAST_OVER_TIME(Catalina_Manager_expiredSessions)), rejected = MAX(LAST_OVER_TIME(Catalina_Manager_rejectedSessions)), peak = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive)), avg_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime)), max_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime)) BY attributes.context, attributes.host + - SORT active DESC + breakdowns: + - field: attributes.context + label: Context + - field: attributes.host + label: Host + metrics: + - field: active + label: Active + format: + type: number + - field: created + label: Created + format: + type: number + - field: expired + label: Expired + format: + type: number + - field: rejected + label: Rejected + format: + type: number + - field: peak + label: Peak + format: + type: number + - field: avg_alive + label: Avg Lifetime (s) + format: + type: number + decimals: 0 + - field: max_alive + label: Max Lifetime (s) + format: + type: number + decimals: 0 + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Servlet Performance' + + - title: Servlet Request Count Over Time + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Servlet_requestCount IS NOT NULL + - STATS requests = SUM(DELTA(Catalina_Servlet_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: requests + label: Requests + format: + type: number + decimals: 0 + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - title: Servlet Error Count Over Time + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Servlet_errorCount IS NOT NULL + - STATS errors = SUM(DELTA(Catalina_Servlet_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: errors + label: Errors + format: + type: number + decimals: 0 + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - title: Servlet Performance Detail + size: {w: 48, h: 13} + esql: + type: datatable + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Servlet_requestCount IS NOT NULL + - STATS requests = MAX(LAST_OVER_TIME(Catalina_Servlet_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_Servlet_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_Servlet_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_Servlet_maxTime)), min_time = MAX(LAST_OVER_TIME(Catalina_Servlet_minTime)), load_time = MAX(LAST_OVER_TIME(Catalina_Servlet_loadTime)), allocated = MAX(LAST_OVER_TIME(Catalina_Servlet_countAllocated)) BY attributes.name, attributes.WebModule + - EVAL min_display = CASE(min_time > 9.0E18, null, min_time) + - EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0) + - EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0) + - SORT requests DESC + breakdowns: + - field: attributes.name + label: Servlet + - field: attributes.WebModule + label: Web Module + metrics: + - field: requests + label: Requests + format: + type: number + - field: errors + label: Errors + format: + type: number + - field: error_pct + label: Error % + format: + type: number + decimals: 2 + suffix: "%" + - field: avg_latency + label: Avg Latency (ms) + format: + type: number + decimals: 1 + - field: max_time + label: Max (ms) + format: + type: number + decimals: 0 + - field: min_display + label: Min (ms) + format: + type: number + decimals: 0 + - field: load_time + label: Load Time (ms) + format: + type: number + decimals: 0 + - field: allocated + label: Allocated + format: + type: number + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Authentication' + + - title: Auth Failures + hide_title: true + size: {w: 24, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Realm_failureCount IS NOT NULL + - STATS failures = SUM(LAST_OVER_TIME(Catalina_Realm_failureCount)) + primary: + field: failures + label: Auth Failures + format: + type: number + decimals: 0 + + - title: Auth Failure Rate + hide_title: true + size: {w: 24, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Realm_failureCount IS NOT NULL + - STATS failure_rate = SUM(DELTA(Catalina_Realm_failureCount)) + primary: + field: failure_rate + label: New Failures + format: + type: number + decimals: 0 + + - title: Authentication Failures Over Time + size: {w: 24, h: 12} + esql: + type: bar + mode: stacked + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_Realm_failureCount IS NOT NULL + - STATS failures = SUM(DELTA(Catalina_Realm_failureCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: failures + label: Auth Failures + format: + type: number + decimals: 0 + legend: + visible: show + position: right diff --git a/packages/apache_tomcat_otel/_dev/shared/tomcat-thread-pool-connections.yaml b/packages/apache_tomcat_otel/_dev/shared/tomcat-thread-pool-connections.yaml new file mode 100644 index 00000000000..2e7fe2d31e0 --- /dev/null +++ b/packages/apache_tomcat_otel/_dev/shared/tomcat-thread-pool-connections.yaml @@ -0,0 +1,461 @@ +dashboards: + - id: apache_tomcat_otel-thread-pool-connections + name: '[Tomcat OTel] Thread Pool & Connections' + description: >- + Thread pool saturation and connection management for Apache Tomcat + connectors, including utilization ratios and capacity limits. + + settings: + margins: true + sync: + cursor: true + tooltips: false + colors: false + + controls: + - type: options + label: Host + data_view: metrics-* + field: resource.attributes.host.name + + panels: + # ─── Navigation ─────────────────────────────────────────────────── + - title: Navigation + size: {w: 48, h: 2} + links: + layout: horizontal + items: + - label: Overview + dashboard: apache_tomcat_otel-overview + - label: Request Processing + dashboard: apache_tomcat_otel-request-processing + - label: Thread Pool & Connections + dashboard: apache_tomcat_otel-thread-pool-connections + - label: JVM Memory & GC + dashboard: apache_tomcat_otel-jvm-memory-gc + - label: Sessions & Applications + dashboard: apache_tomcat_otel-sessions-servlets + - label: JVM & OS Resources + dashboard: apache_tomcat_otel-jvm-os-resources + + # ─── Dashboard Overview + KPIs ───────────────────────────────────── + - hide_title: true + size: {w: 16, h: 12} + markdown: + content: | + ## [Tomcat OTel] Thread Pool & Connections + + This dashboard monitors thread pool saturation and connection management: + - Busy vs. idle thread counts per connector + - Thread pool utilization as a ratio of maxThreads + - Active connections and keep-alive connection counts + - Connection utilization as a ratio of maxConnections + + # KPI Row 1 (w:8 × 4 = 32) + - title: Busy Threads + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)) + primary: + field: busy_threads + label: Busy Threads + format: + type: number + decimals: 0 + + - title: Total Threads + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadCount IS NOT NULL + - STATS total_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount)) + primary: + field: total_threads + label: Total Threads + format: + type: number + decimals: 0 + + - title: Max Threads + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_maxThreads IS NOT NULL + - STATS max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) + primary: + field: max_threads + label: Max Threads + format: + type: number + decimals: 0 + + - title: Thread Utilization + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) + - EVAL thread_util = CASE(max_threads > 0, busy / max_threads, 0) + primary: + field: thread_util + label: Thread Utilization + format: + type: percent + decimals: 1 + + # KPI Row 2 (w:8 × 4 = 32) + - title: Active Connections + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_connectionCount IS NOT NULL + - STATS connections = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)) + primary: + field: connections + label: Active Connections + format: + type: number + decimals: 0 + + - title: Max Connections + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_maxConnections IS NOT NULL + - STATS max_connections = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) + primary: + field: max_connections + label: Max Connections + format: + type: number + compact: true + + - title: Keep-Alive Connections + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_keepAliveCount IS NOT NULL + - STATS keepalive = SUM(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount)) + primary: + field: keepalive + label: Keep-Alive + format: + type: number + decimals: 0 + + - title: Connection Utilization + hide_title: true + size: {w: 8, h: 6} + esql: + type: metric + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_connectionCount IS NOT NULL + - STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) + - EVAL conn_util = CASE(max_conns > 0, conns / max_conns, 0) + primary: + field: conn_util + label: Connection Utilization + format: + type: percent + decimals: 1 + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Thread Pool' + + - title: Thread Counts Over Time + description: Busy, total, and max threads per connector over time. + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), total = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: busy + label: Busy + format: + type: number + decimals: 0 + - field: total + label: Current + format: + type: number + decimals: 0 + - field: max_threads + label: Max + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Current Utilization' + + - title: Thread Pool Utilization % Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - EVAL utilization = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: utilization + label: Utilization % + format: + type: number + decimals: 1 + suffix: "%" + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Connections' + + - title: Connection Count Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_connectionCount IS NOT NULL + - STATS connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), keepalive = MAX(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount)), max_connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: connections + label: Active + format: + type: number + decimals: 0 + - field: keepalive + label: Keep-Alive + format: + type: number + decimals: 0 + - field: max_connections + label: Max + format: + type: number + decimals: 0 + legend: + visible: show + position: right + + - title: Connection Utilization % Over Time + size: {w: 24, h: 12} + esql: + type: line + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_connectionCount IS NOT NULL + - STATS conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name + - EVAL utilization = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0) + - SORT time_bucket ASC + dimension: + field: time_bucket + data_type: date + metrics: + - field: utilization + label: Utilization % + format: + type: number + decimals: 1 + suffix: "%" + breakdown: + field: attributes.name + legend: + visible: show + position: right + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Current Utilization' + + - title: Thread Pool Utilization + size: {w: 24, h: 10} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL + - STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) + - EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 80 + metric: + field: thread_util + label: Thread Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 60 + color: '#54b399' + - up_to: 80 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc + + - title: Connection Utilization + size: {w: 24, h: 10} + esql: + type: gauge + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_connectionCount IS NOT NULL + - STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) + - EVAL conn_util = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0) + - EVAL gauge_min = 0 + - EVAL gauge_max = 100 + - EVAL gauge_goal = 80 + metric: + field: conn_util + label: Connection Utilization + format: + type: number + decimals: 1 + suffix: "%" + minimum: + field: gauge_min + maximum: + field: gauge_max + goal: + field: gauge_goal + color: + range_type: number + range_min: 0 + range_max: 100 + thresholds: + - up_to: 50 + color: '#54b399' + - up_to: 80 + color: '#d6bf57' + - up_to: 100 + color: '#cc5642' + appearance: + shape: arc + + - hide_title: true + size: {w: 48, h: 3} + markdown: + content: '## Thread Pool Configuration' + + - title: Thread Pool Configuration Summary + size: {w: 48, h: 15} + esql: + type: datatable + query: + - TS metrics-tomcat.otel-* + - WHERE Catalina_ThreadPool_maxThreads IS NOT NULL + - STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), current = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)), min_spare = MAX(LAST_OVER_TIME(Catalina_ThreadPool_minSpareThreads)), connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)), keepalive = MAX(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount)), accept_count = MAX(LAST_OVER_TIME(Catalina_ThreadPool_acceptCount)) BY attributes.name + - EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0) + - EVAL conn_util = CASE(max_conns > 0, ROUND(connections / max_conns * 100, 1), 0) + - SORT attributes.name ASC + breakdowns: + - field: attributes.name + label: Connector + metrics: + - field: busy + label: Busy + format: + type: number + - field: current + label: Current + format: + type: number + - field: max_threads + label: Max Threads + format: + type: number + - field: thread_util + label: Thread Util % + format: + type: number + decimals: 1 + suffix: "%" + - field: connections + label: Connections + format: + type: number + - field: max_conns + label: Max Conns + format: + type: number + compact: true + - field: conn_util + label: Conn Util % + format: + type: number + decimals: 1 + suffix: "%" + - field: keepalive + label: Keep-Alive + format: + type: number + - field: accept_count + label: Accept Queue + format: + type: number diff --git a/packages/apache_tomcat_otel/changelog.yml b/packages/apache_tomcat_otel/changelog.yml new file mode 100644 index 00000000000..662fe57e0d7 --- /dev/null +++ b/packages/apache_tomcat_otel/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: "0.1.0" + changes: + - description: Initial draft of the apache_tomcat_otel content pack. + type: enhancement + link: tba diff --git a/packages/apache_tomcat_otel/docs/README.md b/packages/apache_tomcat_otel/docs/README.md new file mode 100644 index 00000000000..52bd6d82b32 --- /dev/null +++ b/packages/apache_tomcat_otel/docs/README.md @@ -0,0 +1,142 @@ +# Apache Tomcat OpenTelemetry Assets + +Apache Tomcat is a Java servlet container and web server that implements the Jakarta Servlet, Jakarta Server Pages, and WebSocket specifications, widely deployed as the runtime for Java web applications. + +These assets provide dashboards, alert rules, and SLO templates for monitoring Apache Tomcat via the OpenTelemetry Prometheus receiver scraping a Prometheus JMX Exporter, covering request processing, thread pool and connection management, JVM memory and garbage collection, session lifecycle, and OS-level resource utilization. + +## Compatibility + +The Apache Tomcat OpenTelemetry assets have been tested with: +- OpenTelemetry `prometheusreceiver` v0.144.0 from OpenTelemetry Collector Contrib. +- IApache Tomcat/9.0.115 + +## Requirements + +You need Elasticsearch for storing and searching your data and Kibana for visualizing and managing it. +You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, or self-manage +the Elastic Stack on your own hardware. + +## Setup + +### Prerequisites + +You must attach the [Prometheus JMX Exporter](https://github.com/prometheus/jmx_exporter) Java agent to your Tomcat JVM process. This agent exposes Tomcat's JMX MBeans as Prometheus metrics on an HTTP endpoint (port 9404 by default). + +1. Download the JMX Exporter agent JAR: + +```bash +curl -L -o jmx_prometheus_javaagent.jar https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/1.0.1/jmx_prometheus_javaagent-1.0.1.jar +``` + +2. Create a JMX Exporter configuration file (`jmx_exporter_config.yaml`). A minimal configuration that exposes all Catalina and JVM MBeans: + +```yaml +rules: + - pattern: ".*" +``` + +3. Add the agent to your Tomcat startup by setting `CATALINA_OPTS` in `setenv.sh` (or equivalent): + +```bash +export CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/jmx_prometheus_javaagent.jar=9404:/path/to/jmx_exporter_config.yaml" +``` + +4. Verify the metrics endpoint is accessible: + +```bash +curl http://localhost:9404/metrics +``` + +You should see Prometheus-formatted metrics including `Catalina_*` and `java_lang_*` prefixed lines. + +### Configuration + +Configure your OpenTelemetry Collector (or EDOT Collector) with the following configuration to scrape Tomcat JMX Exporter metrics and export them to Elasticsearch. + +Placeholders: + +- `` — Hostname or IP address of the Tomcat instance running the JMX Exporter (e.g. `localhost`) +- `` — Port the JMX Exporter is listening on (e.g. `9404`) +- `` — Your Elasticsearch endpoint URL (e.g. `https://my-deployment.es.us-central1.gcp.cloud.es.io:443`) +- `${env:ES_API_KEY}` — Elasticsearch API key, set via the `ES_API_KEY` environment variable + +```yaml +receivers: + prometheus/tomcat: + config: + scrape_configs: + - job_name: "tomcat" + scrape_interval: 10s + metrics_path: /metrics + params: + format: [prometheus] + scheme: http + static_configs: + - targets: [":"] + +processors: + resource/dataset: + attributes: + - key: data_stream.dataset + value: tomcat + action: upsert + +exporters: + elasticsearch/otel: + endpoint: + api_key: ${env:ES_API_KEY} + mapping: + mode: otel + logs_dynamic_index: + enabled: true + metrics_dynamic_index: + enabled: true + +service: + pipelines: + metrics: + receivers: [prometheus/tomcat] + processors: [resource/dataset] + exporters: [elasticsearch/otel] +``` + +## Reference + +### Metrics + +Refer to the [Prometheus receiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/prometheusreceiver/README.md) documentation for details on the receiver configuration. The available Tomcat metrics are defined by the [Prometheus JMX Exporter](https://github.com/prometheus/jmx_exporter) configuration and the JMX MBeans exposed by your Tomcat instance, including `Catalina_*` (request processing, thread pools, sessions, servlets) and `java_lang_*` (JVM memory, garbage collection, threading, OS resources) metric families. + +## Dashboards + +| Dashboard | Description | +|-----------|-------------| +| **[Tomcat OTel] Overview** | High-level health and performance overview covering golden signals: latency, traffic, errors, and saturation. | +| **[Tomcat OTel] Request Processing** | Detailed request processing pipeline metrics including per-connector throughput, latency, error rates, and per-servlet performance. | +| **[Tomcat OTel] Thread Pool & Connections** | Thread pool saturation and connection management for connectors, including utilization ratios and capacity limits. | +| **[Tomcat OTel] JVM Memory & GC** | JVM memory management and garbage collection monitoring, including heap/non-heap usage, G1 memory pools, and GC activity. | +| **[Tomcat OTel] Sessions & Applications** | HTTP session lifecycle, per-application performance monitoring, servlet detail, and authentication failure tracking for web applications. | +| **[Tomcat OTel] JVM & OS Resources** | JVM threading, CPU utilization, file descriptors, operating system resource monitoring, and web resource cache performance for the Tomcat JVM process. | + +## Alert rules + +| Alert | Trigger | Severity | +|-------|---------|----------| +| **[Tomcat OTel] Thread pool saturation** | Thread pool utilization exceeds 80% of maximum threads for a connector | Warning | +| **[Tomcat OTel] Connection pool saturation** | Connection count exceeds 80% of maximum connections for a connector | Warning | +| **[Tomcat OTel] High request error rate** | HTTP error rate exceeds 5% of total requests for a connector | Critical | +| **[Tomcat OTel] Request latency spike** | Average request processing latency exceeds 500 ms for a connector | Warning | +| **[Tomcat OTel] JVM heap memory pressure** | Heap memory utilization exceeds 85% of maximum heap | Critical | +| **[Tomcat OTel] Old generation GC activity** | Old generation (full) garbage collection cycles detected | Warning | +| **[Tomcat OTel] File descriptor exhaustion** | Open file descriptor count exceeds 80% of the system limit | Critical | +| **[Tomcat OTel] High JVM process CPU usage** | JVM process CPU utilization exceeds 90% | Warning | +| **[Tomcat OTel] Session rejection** | HTTP sessions rejected due to maximum active sessions limit reached | Warning | + +## SLO templates + +> **Note**: SLO templates require Elastic Stack version 9.4.0 or later. + +| SLO | Target | Window | Description | +|-----|--------|--------|-------------| +| **[Tomcat OTel] Average request latency 99.5% rolling 30 days** | 99.5% | 30-day rolling | Ensures 99.5% of 1-minute intervals show average request latency below 500 ms over a rolling 30-day period. | +| **[Tomcat OTel] Request error rate 99.5% rolling 30 days** | 99.5% | 30-day rolling | Ensures 99.5% of 1-minute intervals show an HTTP error rate below 5% over a rolling 30-day period. | +| **[Tomcat OTel] Thread pool utilization 99.5% rolling 30 days** | 99.5% | 30-day rolling | Ensures 99.5% of 1-minute intervals show thread pool utilization below 80% over a rolling 30-day period. | diff --git a/packages/apache_tomcat_otel/img/apache_tomcat_jvm_memory_gc.png b/packages/apache_tomcat_otel/img/apache_tomcat_jvm_memory_gc.png new file mode 100644 index 00000000000..c0e783ca784 Binary files /dev/null and b/packages/apache_tomcat_otel/img/apache_tomcat_jvm_memory_gc.png differ diff --git a/packages/apache_tomcat_otel/img/apache_tomcat_jvm_os_resources.png b/packages/apache_tomcat_otel/img/apache_tomcat_jvm_os_resources.png new file mode 100644 index 00000000000..a466d2363b1 Binary files /dev/null and b/packages/apache_tomcat_otel/img/apache_tomcat_jvm_os_resources.png differ diff --git a/packages/apache_tomcat_otel/img/apache_tomcat_otel_logo.svg b/packages/apache_tomcat_otel/img/apache_tomcat_otel_logo.svg new file mode 100644 index 00000000000..62a7c3394ce --- /dev/null +++ b/packages/apache_tomcat_otel/img/apache_tomcat_otel_logo.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/apache_tomcat_otel/img/apache_tomcat_overview.png b/packages/apache_tomcat_otel/img/apache_tomcat_overview.png new file mode 100644 index 00000000000..d9d6a5fb02f Binary files /dev/null and b/packages/apache_tomcat_otel/img/apache_tomcat_overview.png differ diff --git a/packages/apache_tomcat_otel/img/apache_tomcat_request_processing.png b/packages/apache_tomcat_otel/img/apache_tomcat_request_processing.png new file mode 100644 index 00000000000..8b2e8e511ec Binary files /dev/null and b/packages/apache_tomcat_otel/img/apache_tomcat_request_processing.png differ diff --git a/packages/apache_tomcat_otel/img/apache_tomcat_sessions_applications.png b/packages/apache_tomcat_otel/img/apache_tomcat_sessions_applications.png new file mode 100644 index 00000000000..24e20d5a365 Binary files /dev/null and b/packages/apache_tomcat_otel/img/apache_tomcat_sessions_applications.png differ diff --git a/packages/apache_tomcat_otel/img/apache_tomcat_thread_pool_connections.png b/packages/apache_tomcat_otel/img/apache_tomcat_thread_pool_connections.png new file mode 100644 index 00000000000..d7284c758d5 Binary files /dev/null and b/packages/apache_tomcat_otel/img/apache_tomcat_thread_pool_connections.png differ diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-connection-pool-saturation.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-connection-pool-saturation.json new file mode 100644 index 00000000000..ebbac485d11 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-connection-pool-saturation.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-connection-pool-saturation", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] Connection pool saturation", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "1m" + }, + "alertDelay": { + "active": 3 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\n AND Catalina_ThreadPool_maxConnections IS NOT NULL\n| STATS\n connections = MAX(Catalina_ThreadPool_connectionCount),\n max_connections = MAX(Catalina_ThreadPool_maxConnections)\n BY host.name, attributes.name\n| WHERE max_connections > 0\n| EVAL connection_pct = ROUND(connections / max_connections * 100.0, 2)\n// Connection saturation threshold \u2014 when keep-alive connections accumulate\n// they can starve new connections; adjust based on connector capacity planning\n| WHERE connection_pct > 80.0\n| SORT connection_pct DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 5, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-file-descriptor-exhaustion.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-file-descriptor-exhaustion.json new file mode 100644 index 00000000000..cdfda88b18c --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-file-descriptor-exhaustion.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-file-descriptor-exhaustion", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] File descriptor exhaustion", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "5m" + }, + "alertDelay": { + "active": 3 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\n AND java_lang_OperatingSystem_MaxFileDescriptorCount IS NOT NULL\n| STATS\n open_fds = MAX(java_lang_OperatingSystem_OpenFileDescriptorCount),\n max_fds = MAX(java_lang_OperatingSystem_MaxFileDescriptorCount)\n BY host.name\n| WHERE max_fds > 0\n| EVAL fd_pct = ROUND(open_fds / max_fds * 100.0, 2)\n// File descriptor exhaustion prevents new socket connections and file operations\n// Adjust threshold based on your FD limits (ulimit -n)\n| WHERE fd_pct > 80.0\n| SORT fd_pct DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 5, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-high-jvm-process-cpu.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-high-jvm-process-cpu.json new file mode 100644 index 00000000000..f88d8c895d7 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-high-jvm-process-cpu.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-high-jvm-process-cpu", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] High JVM process CPU usage", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "1m" + }, + "alertDelay": { + "active": 3 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE java_lang_OperatingSystem_ProcessCpuLoad IS NOT NULL\n| STATS avg_cpu = AVG(java_lang_OperatingSystem_ProcessCpuLoad)\n BY host.name\n| EVAL cpu_pct = ROUND(avg_cpu * 100.0, 2)\n// JVM process CPU threshold \u2014 sustained high CPU often correlates with\n// GC pressure, thread contention, or compute-heavy request processing\n// Adjust based on expected workload and available CPU cores\n| WHERE cpu_pct > 90.0\n| SORT cpu_pct DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 5, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-high-request-error-rate.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-high-request-error-rate.json new file mode 100644 index 00000000000..072757500a2 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-high-request-error-rate.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-high-request-error-rate", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] High request error rate", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "5m" + }, + "alertDelay": { + "active": 3 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL\n AND Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\n| STATS\n max_errors = MAX(Catalina_GlobalRequestProcessor_errorCount),\n min_errors = MIN(Catalina_GlobalRequestProcessor_errorCount),\n max_requests = MAX(Catalina_GlobalRequestProcessor_requestCount),\n min_requests = MIN(Catalina_GlobalRequestProcessor_requestCount)\n BY host.name, attributes.name\n| EVAL\n delta_errors = max_errors - min_errors,\n delta_requests = max_requests - min_requests\n// Minimum request volume to avoid noisy alerts on low-traffic connectors\n// Adjust this threshold based on expected traffic volume\n| WHERE delta_requests > 10\n| EVAL error_rate_pct = ROUND(delta_errors / delta_requests * 100.0, 2)\n// Alert threshold \u2014 adjust based on acceptable error rate for your services\n| WHERE error_rate_pct > 5.0\n| SORT error_rate_pct DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 15, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-jvm-heap-memory-pressure.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-jvm-heap-memory-pressure.json new file mode 100644 index 00000000000..c428b560c0c --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-jvm-heap-memory-pressure.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-jvm-heap-memory-pressure", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] JVM heap memory pressure", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "1m" + }, + "alertDelay": { + "active": 3 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\n AND java_lang_Memory_HeapMemoryUsage_max IS NOT NULL\n| STATS\n heap_used = MAX(java_lang_Memory_HeapMemoryUsage_used),\n heap_max = MAX(java_lang_Memory_HeapMemoryUsage_max)\n BY host.name\n// HeapMemoryUsage_max can be -1 if undefined; filter to valid values\n| WHERE heap_max > 0\n| EVAL heap_pct = ROUND(heap_used / heap_max * 100.0, 2)\n// Heap utilisation threshold \u2014 peaks above 85% indicate memory pressure\n// Sustained high utilisation often precedes OutOfMemoryError\n| WHERE heap_pct > 85.0\n| SORT heap_pct DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 5, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-old-generation-gc-activity.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-old-generation-gc-activity.json new file mode 100644 index 00000000000..7cfd32cf431 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-old-generation-gc-activity.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-old-generation-gc-activity", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] Old generation GC activity", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "5m" + }, + "alertDelay": { + "active": 2 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE java_lang_G1_Old_Generation_CollectionCount IS NOT NULL\n| STATS\n max_count = MAX(java_lang_G1_Old_Generation_CollectionCount),\n min_count = MIN(java_lang_G1_Old_Generation_CollectionCount)\n BY host.name\n| EVAL full_gc_count = max_count - min_count\n// Any old generation (full) GC pauses the entire JVM and directly impacts latency\n// Frequent full GC (> 1/min) is critical \u2014 adjust threshold to match your GC tuning\n| WHERE full_gc_count > 0\n| SORT full_gc_count DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 15, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-request-latency-spike.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-request-latency-spike.json new file mode 100644 index 00000000000..fff70799d15 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-request-latency-spike.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-request-latency-spike", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] Request latency spike", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "5m" + }, + "alertDelay": { + "active": 3 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL\n AND Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\n| STATS\n max_time = MAX(Catalina_GlobalRequestProcessor_processingTime),\n min_time = MIN(Catalina_GlobalRequestProcessor_processingTime),\n max_requests = MAX(Catalina_GlobalRequestProcessor_requestCount),\n min_requests = MIN(Catalina_GlobalRequestProcessor_requestCount)\n BY host.name, attributes.name\n| EVAL\n delta_time_ms = max_time - min_time,\n delta_requests = max_requests - min_requests\n// Minimum request volume to compute a meaningful average\n| WHERE delta_requests > 10\n| EVAL avg_latency_ms = ROUND(delta_time_ms / delta_requests, 2)\n// Latency threshold in milliseconds \u2014 adjust based on your SLA\n// Consider that this is average latency; tail latency will be higher\n| WHERE avg_latency_ms > 500.0\n| SORT avg_latency_ms DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 15, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-session-rejection.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-session-rejection.json new file mode 100644 index 00000000000..ed764c3fa57 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-session-rejection.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-session-rejection", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] Session rejection", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "5m" + }, + "alertDelay": { + "active": 2 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE Catalina_Manager_rejectedSessions IS NOT NULL\n| STATS\n max_rejected = MAX(Catalina_Manager_rejectedSessions),\n min_rejected = MIN(Catalina_Manager_rejectedSessions)\n BY host.name, attributes.context, attributes.host\n| EVAL new_rejections = max_rejected - min_rejected\n// Any session rejection means maxActiveSessions has been reached\n// This directly impacts users who cannot establish new sessions\n| WHERE new_rejections > 0\n| SORT new_rejections DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 15, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-thread-pool-saturation.json b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-thread-pool-saturation.json new file mode 100644 index 00000000000..70864b0621b --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/alerting_rule_template/apache_tomcat_otel-thread-pool-saturation.json @@ -0,0 +1,36 @@ +{ + "id": "apache_tomcat_otel-thread-pool-saturation", + "type": "alerting_rule_template", + "managed": true, + "attributes": { + "name": "[Tomcat OTel] Thread pool saturation", + "ruleTypeId": ".es-query", + "tags": [ + "observability", + "tomcat" + ], + "schedule": { + "interval": "1m" + }, + "alertDelay": { + "active": 3 + }, + "params": { + "searchType": "esqlQuery", + "esqlQuery": { + "esql": "FROM metrics-tomcat.otel-*\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\n AND Catalina_ThreadPool_maxThreads IS NOT NULL\n| STATS\n busy = MAX(Catalina_ThreadPool_currentThreadsBusy),\n max_threads = MAX(Catalina_ThreadPool_maxThreads)\n BY host.name, attributes.name\n| WHERE max_threads > 0\n| EVAL utilization_pct = ROUND(busy / max_threads * 100.0, 2)\n// Thread pool saturation threshold \u2014 adjust based on your capacity requirements\n// Above 80% the risk of request queuing and rejection increases rapidly\n| WHERE utilization_pct > 80.0\n| SORT utilization_pct DESC" + }, + "size": 0, + "threshold": [ + 0 + ], + "thresholdComparator": ">", + "timeField": "@timestamp", + "timeWindowSize": 5, + "timeWindowUnit": "m", + "groupBy": "row", + "termField": "host.name", + "termSize": 100 + } + } +} diff --git a/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-jvm-memory-gc.json b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-jvm-memory-gc.json new file mode 100644 index 00000000000..223c32a18e7 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-jvm-memory-gc.json @@ -0,0 +1,67 @@ +{ + "attributes": { + "title": "[Tomcat OTel] JVM Memory & GC", + "description": "JVM memory management and garbage collection monitoring for Apache Tomcat, including heap/non-heap usage, G1 memory pools, and GC activity.", + "panelsJSON": "[{\"panelIndex\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\", \"gridData\": {\"x\": 0, \"y\": 0, \"w\": 48, \"h\": 2, \"i\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\"}, \"type\": \"links\", \"embeddableConfig\": {\"title\": \"Navigation\", \"enhancements\": {}, \"attributes\": {\"layout\": \"horizontal\", \"links\": [{\"id\": \"3af4ba12-6f83-488a-bdc9-0c7216a22d73\", \"order\": 0, \"label\": \"Overview\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard\"}, {\"id\": \"5909ede8-2eec-8644-b2c1-c28c00240a56\", \"order\": 1, \"label\": \"Request Processing\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard\"}, {\"id\": \"9dfd6ff5-60a6-d609-8f72-50cec07261e9\", \"order\": 2, \"label\": \"Thread Pool & Connections\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard\"}, {\"id\": \"6632c321-6dab-2198-f8fe-27c3e8abc5da\", \"order\": 3, \"label\": \"JVM Memory & GC\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard\"}, {\"id\": \"82660977-7ef5-2f6d-e57c-f38685be84e1\", \"order\": 4, \"label\": \"Sessions & Applications\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard\"}, {\"id\": \"2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f\", \"order\": 5, \"label\": \"JVM & OS Resources\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard\"}]}}}, {\"panelIndex\": \"0563dba8-e018-01bf-7e3c-91932750954e\", \"gridData\": {\"x\": 0, \"y\": 2, \"w\": 16, \"h\": 12, \"i\": \"0563dba8-e018-01bf-7e3c-91932750954e\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## [Tomcat OTel] JVM Memory & GC\\n\\nThis dashboard monitors JVM memory management and garbage collection:\\n- Heap and non-heap memory usage, committed and max\\n- G1 memory pool breakdown (Eden, Survivor, Old Gen)\\n- Young and Old GC collection counts and pause times\\n- Memory leak detection via Old Gen usage trends\\n\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"b1ea5fbd-44ff-9dfe-9205-dd1d10b62f9a\", \"gridData\": {\"x\": 16, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"b1ea5fbd-44ff-9dfe-9205-dd1d10b62f9a\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Heap Used\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"5c70fb75-4b0b-ce59-fa09-fead4d159bfa\", \"layerType\": \"data\", \"metricAccessor\": \"f6d5c74c-a352-263c-58f1-11b1fcecebb1\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"5c70fb75-4b0b-ce59-fa09-fead4d159bfa\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used))\"}, \"columns\": [{\"fieldName\": \"heap_used\", \"columnId\": \"f6d5c74c-a352-263c-58f1-11b1fcecebb1\", \"label\": \"Heap Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"heap_used\", \"columnId\": \"f6d5c74c-a352-263c-58f1-11b1fcecebb1\", \"label\": \"Heap Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"15f34f9e-306b-129a-5a81-a10c62b8484e\", \"gridData\": {\"x\": 24, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"15f34f9e-306b-129a-5a81-a10c62b8484e\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Heap Max\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"5ae9bc18-4cc6-4bec-2628-b316ad64605f\", \"layerType\": \"data\", \"metricAccessor\": \"4ddbf955-c6ac-e3c7-c840-783fed04f61d\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_max IS NOT NULL\\n| STATS heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"5ae9bc18-4cc6-4bec-2628-b316ad64605f\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_max IS NOT NULL\\n| STATS heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\"}, \"columns\": [{\"fieldName\": \"heap_max\", \"columnId\": \"4ddbf955-c6ac-e3c7-c840-783fed04f61d\", \"label\": \"Heap Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"heap_max\", \"columnId\": \"4ddbf955-c6ac-e3c7-c840-783fed04f61d\", \"label\": \"Heap Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"e2440dbd-3ca0-419e-6f16-c8abc2ed0b1d\", \"gridData\": {\"x\": 32, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"e2440dbd-3ca0-419e-6f16-c8abc2ed0b1d\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Non-Heap Used\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"becfbb5b-526b-c43f-3ded-de34575eeb5a\", \"layerType\": \"data\", \"metricAccessor\": \"ea9bfb1f-9750-06d7-3fd8-be04840b1bb1\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_NonHeapMemoryUsage_used IS NOT NULL\\n| STATS nonheap_used = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_used))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"becfbb5b-526b-c43f-3ded-de34575eeb5a\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_NonHeapMemoryUsage_used IS NOT NULL\\n| STATS nonheap_used = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_used))\"}, \"columns\": [{\"fieldName\": \"nonheap_used\", \"columnId\": \"ea9bfb1f-9750-06d7-3fd8-be04840b1bb1\", \"label\": \"Non-Heap Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"nonheap_used\", \"columnId\": \"ea9bfb1f-9750-06d7-3fd8-be04840b1bb1\", \"label\": \"Non-Heap Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"a768812c-41c6-f434-98e0-250f22a595b0\", \"gridData\": {\"x\": 40, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"a768812c-41c6-f434-98e0-250f22a595b0\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Heap Utilization\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"6a261722-8393-b8ba-0d0a-571df89afef1\", \"layerType\": \"data\", \"metricAccessor\": \"6558cfe1-f86b-5571-77a8-ea3b9b12de63\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, heap_used / heap_max, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"6a261722-8393-b8ba-0d0a-571df89afef1\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, heap_used / heap_max, 0)\"}, \"columns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"6558cfe1-f86b-5571-77a8-ea3b9b12de63\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"6558cfe1-f86b-5571-77a8-ea3b9b12de63\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"028b6364-3832-96c6-1724-ada79798cbeb\", \"gridData\": {\"x\": 16, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"028b6364-3832-96c6-1724-ada79798cbeb\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Young GC Count\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"e14d35f3-e53e-a844-334f-4563fceb8e92\", \"layerType\": \"data\", \"metricAccessor\": \"513abb1a-fae9-09f9-aaca-1626f37dce44\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL\\n| STATS young_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"e14d35f3-e53e-a844-334f-4563fceb8e92\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL\\n| STATS young_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionCount))\"}, \"columns\": [{\"fieldName\": \"young_gc\", \"columnId\": \"513abb1a-fae9-09f9-aaca-1626f37dce44\", \"label\": \"Young GC Count\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"young_gc\", \"columnId\": \"513abb1a-fae9-09f9-aaca-1626f37dce44\", \"label\": \"Young GC Count\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"79c860ba-835a-91ca-4160-3a531c3cd365\", \"gridData\": {\"x\": 24, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"79c860ba-835a-91ca-4160-3a531c3cd365\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Old GC Count\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"96466c36-89ad-658e-644d-821f906ea78e\", \"layerType\": \"data\", \"metricAccessor\": \"d298e1df-b9a6-97df-e64b-fe78819f1c00\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Old_Generation_CollectionCount IS NOT NULL\\n| STATS old_gc = MAX(LAST_OVER_TIME(java_lang_G1_Old_Generation_CollectionCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"96466c36-89ad-658e-644d-821f906ea78e\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Old_Generation_CollectionCount IS NOT NULL\\n| STATS old_gc = MAX(LAST_OVER_TIME(java_lang_G1_Old_Generation_CollectionCount))\"}, \"columns\": [{\"fieldName\": \"old_gc\", \"columnId\": \"d298e1df-b9a6-97df-e64b-fe78819f1c00\", \"label\": \"Old GC Count\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"old_gc\", \"columnId\": \"d298e1df-b9a6-97df-e64b-fe78819f1c00\", \"label\": \"Old GC Count\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"2f0bd208-c41a-c274-db2b-b0eda942619d\", \"gridData\": {\"x\": 32, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"2f0bd208-c41a-c274-db2b-b0eda942619d\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Young GC Time\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"63107ea8-1225-548d-856f-c32600f472f9\", \"layerType\": \"data\", \"metricAccessor\": \"44f553eb-a09e-4878-0e7c-24a21d2cf454\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionTime IS NOT NULL\\n| STATS young_gc_time = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionTime))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"63107ea8-1225-548d-856f-c32600f472f9\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionTime IS NOT NULL\\n| STATS young_gc_time = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionTime))\"}, \"columns\": [{\"fieldName\": \"young_gc_time\", \"columnId\": \"44f553eb-a09e-4878-0e7c-24a21d2cf454\", \"label\": \"Young GC Time\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}], \"allColumns\": [{\"fieldName\": \"young_gc_time\", \"columnId\": \"44f553eb-a09e-4878-0e7c-24a21d2cf454\", \"label\": \"Young GC Time\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"a25c017b-f1a2-50f7-2e2a-04a26d8ba1a7\", \"gridData\": {\"x\": 40, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"a25c017b-f1a2-50f7-2e2a-04a26d8ba1a7\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Last GC Duration\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"82085c94-2a56-c04a-d9d4-6ba8ad8ee731\", \"layerType\": \"data\", \"metricAccessor\": \"7f452ed8-c495-b40a-0010-4adc12a19e6c\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_LastGcInfo_duration IS NOT NULL\\n| STATS last_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_LastGcInfo_duration))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"82085c94-2a56-c04a-d9d4-6ba8ad8ee731\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_LastGcInfo_duration IS NOT NULL\\n| STATS last_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_LastGcInfo_duration))\"}, \"columns\": [{\"fieldName\": \"last_gc\", \"columnId\": \"7f452ed8-c495-b40a-0010-4adc12a19e6c\", \"label\": \"Last GC Duration\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}], \"allColumns\": [{\"fieldName\": \"last_gc\", \"columnId\": \"7f452ed8-c495-b40a-0010-4adc12a19e6c\", \"label\": \"Last GC Duration\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"1ef4aeff-9c76-634d-1d20-86cda09a76bb\", \"gridData\": {\"x\": 0, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"1ef4aeff-9c76-634d-1d20-86cda09a76bb\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Heap Memory Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"f0d9ecde-6012-17e7-9365-b158efe98961\", \"accessors\": [\"0e34f4a0-6622-5b1a-a0ac-2108768d4d32\", \"63400a19-f455-9069-592c-7feb0ada6fc6\", \"9a771b13-ea72-7ba4-ab31-fc6c4598ff1d\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_committed)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f0d9ecde-6012-17e7-9365-b158efe98961\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_committed)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"heap_used\", \"columnId\": \"0e34f4a0-6622-5b1a-a0ac-2108768d4d32\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_committed\", \"columnId\": \"63400a19-f455-9069-592c-7feb0ada6fc6\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_max\", \"columnId\": \"9a771b13-ea72-7ba4-ab31-fc6c4598ff1d\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"heap_used\", \"columnId\": \"0e34f4a0-6622-5b1a-a0ac-2108768d4d32\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_committed\", \"columnId\": \"63400a19-f455-9069-592c-7feb0ada6fc6\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_max\", \"columnId\": \"9a771b13-ea72-7ba4-ab31-fc6c4598ff1d\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"b94f8418-9ec9-622a-08de-3f07ab695eaa\", \"gridData\": {\"x\": 24, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"b94f8418-9ec9-622a-08de-3f07ab695eaa\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Non-Heap Memory Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"0d589d42-0ddb-d4b6-91b6-165cc2e2cccc\", \"accessors\": [\"245736fe-3e6d-c16d-4413-e0530f124792\", \"3f22d802-75fc-bddd-3656-6c905c5e9384\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_NonHeapMemoryUsage_used IS NOT NULL\\n| STATS nonheap_used = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_used)), nonheap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"0d589d42-0ddb-d4b6-91b6-165cc2e2cccc\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_NonHeapMemoryUsage_used IS NOT NULL\\n| STATS nonheap_used = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_used)), nonheap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_NonHeapMemoryUsage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"nonheap_used\", \"columnId\": \"245736fe-3e6d-c16d-4413-e0530f124792\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"nonheap_committed\", \"columnId\": \"3f22d802-75fc-bddd-3656-6c905c5e9384\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"nonheap_used\", \"columnId\": \"245736fe-3e6d-c16d-4413-e0530f124792\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"nonheap_committed\", \"columnId\": \"3f22d802-75fc-bddd-3656-6c905c5e9384\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d3c82ade-58b0-bfe2-0dc0-9447dde485e1\", \"gridData\": {\"x\": 0, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"d3c82ade-58b0-bfe2-0dc0-9447dde485e1\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"GC Collection Count Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"242f5019-a0e4-4d05-c848-b6f97722297a\", \"accessors\": [\"4ada1f47-7a37-ab8a-920d-ebac28a0f1b6\", \"98d56803-bee3-a6b9-936d-3da68a72591f\", \"3f31b773-6712-59ab-0315-cdc2f10c275f\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [{\"rule\": {\"type\": \"matchExactly\", \"values\": [\"Old GC\"]}, \"color\": {\"type\": \"colorCode\", \"colorCode\": \"#cc5642\"}, \"touched\": false}], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL\\n| STATS young_gc = SUM(DELTA(java_lang_G1_Young_Generation_CollectionCount)), old_gc = SUM(DELTA(java_lang_G1_Old_Generation_CollectionCount)), concurrent_gc = SUM(DELTA(java_lang_G1_Concurrent_GC_CollectionCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"242f5019-a0e4-4d05-c848-b6f97722297a\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL\\n| STATS young_gc = SUM(DELTA(java_lang_G1_Young_Generation_CollectionCount)), old_gc = SUM(DELTA(java_lang_G1_Old_Generation_CollectionCount)), concurrent_gc = SUM(DELTA(java_lang_G1_Concurrent_GC_CollectionCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"young_gc\", \"columnId\": \"4ada1f47-7a37-ab8a-920d-ebac28a0f1b6\", \"label\": \"Young GC\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"old_gc\", \"columnId\": \"98d56803-bee3-a6b9-936d-3da68a72591f\", \"label\": \"Old GC\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"concurrent_gc\", \"columnId\": \"3f31b773-6712-59ab-0315-cdc2f10c275f\", \"label\": \"Concurrent GC\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"young_gc\", \"columnId\": \"4ada1f47-7a37-ab8a-920d-ebac28a0f1b6\", \"label\": \"Young GC\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"old_gc\", \"columnId\": \"98d56803-bee3-a6b9-936d-3da68a72591f\", \"label\": \"Old GC\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"concurrent_gc\", \"columnId\": \"3f31b773-6712-59ab-0315-cdc2f10c275f\", \"label\": \"Concurrent GC\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"ff651e50-114f-a753-3ea3-2b7304fb85ee\", \"gridData\": {\"x\": 24, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"ff651e50-114f-a753-3ea3-2b7304fb85ee\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"GC Cumulative Time Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"0aabdb2c-7b32-4923-3ffc-41f288cfb109\", \"accessors\": [\"efa0e4e4-913f-db4f-051b-68f1601c263d\", \"c9c956cb-e298-f782-d76e-43afbaa9c702\", \"0c1cfc29-c1a6-0bb5-04f0-3ed0942aa6d3\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [{\"rule\": {\"type\": \"matchExactly\", \"values\": [\"Old GC Time (ms)\"]}, \"color\": {\"type\": \"colorCode\", \"colorCode\": \"#cc5642\"}, \"touched\": false}], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionTime IS NOT NULL\\n| STATS young_time = SUM(DELTA(java_lang_G1_Young_Generation_CollectionTime)), old_time = SUM(DELTA(java_lang_G1_Old_Generation_CollectionTime)), concurrent_time = SUM(DELTA(java_lang_G1_Concurrent_GC_CollectionTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"0aabdb2c-7b32-4923-3ffc-41f288cfb109\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionTime IS NOT NULL\\n| STATS young_time = SUM(DELTA(java_lang_G1_Young_Generation_CollectionTime)), old_time = SUM(DELTA(java_lang_G1_Old_Generation_CollectionTime)), concurrent_time = SUM(DELTA(java_lang_G1_Concurrent_GC_CollectionTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"young_time\", \"columnId\": \"efa0e4e4-913f-db4f-051b-68f1601c263d\", \"label\": \"Young GC Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"old_time\", \"columnId\": \"c9c956cb-e298-f782-d76e-43afbaa9c702\", \"label\": \"Old GC Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"concurrent_time\", \"columnId\": \"0c1cfc29-c1a6-0bb5-04f0-3ed0942aa6d3\", \"label\": \"Concurrent GC Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"young_time\", \"columnId\": \"efa0e4e4-913f-db4f-051b-68f1601c263d\", \"label\": \"Young GC Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"old_time\", \"columnId\": \"c9c956cb-e298-f782-d76e-43afbaa9c702\", \"label\": \"Old GC Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"concurrent_time\", \"columnId\": \"0c1cfc29-c1a6-0bb5-04f0-3ed0942aa6d3\", \"label\": \"Concurrent GC Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"15687797-e31d-48e0-b3f7-cc7f02da5992\", \"gridData\": {\"x\": 0, \"y\": 47, \"w\": 16, \"h\": 12, \"i\": \"15687797-e31d-48e0-b3f7-cc7f02da5992\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Eden Space Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"1af0960a-f116-2f2d-b9cd-0dd29aec3ae6\", \"accessors\": [\"4a82aaf0-1f52-0362-4a9f-fef276e0094a\", \"fa7267f6-06dc-213f-c740-5dbe81d2c142\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"bottom\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Eden_Space_Usage_used IS NOT NULL\\n| STATS eden_used = MAX(LAST_OVER_TIME(java_lang_G1_Eden_Space_Usage_used)), eden_committed = MAX(LAST_OVER_TIME(java_lang_G1_Eden_Space_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"1af0960a-f116-2f2d-b9cd-0dd29aec3ae6\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Eden_Space_Usage_used IS NOT NULL\\n| STATS eden_used = MAX(LAST_OVER_TIME(java_lang_G1_Eden_Space_Usage_used)), eden_committed = MAX(LAST_OVER_TIME(java_lang_G1_Eden_Space_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"eden_used\", \"columnId\": \"4a82aaf0-1f52-0362-4a9f-fef276e0094a\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"eden_committed\", \"columnId\": \"fa7267f6-06dc-213f-c740-5dbe81d2c142\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"eden_used\", \"columnId\": \"4a82aaf0-1f52-0362-4a9f-fef276e0094a\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"eden_committed\", \"columnId\": \"fa7267f6-06dc-213f-c740-5dbe81d2c142\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"aa97818b-5406-cff1-856e-903a97280889\", \"gridData\": {\"x\": 16, \"y\": 47, \"w\": 16, \"h\": 12, \"i\": \"aa97818b-5406-cff1-856e-903a97280889\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Survivor Space Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"94da83fd-50c4-0c4b-4368-2dbeace6f342\", \"accessors\": [\"49be82cb-fa60-0152-55e2-e070cbfe1287\", \"caf722cb-470f-5f82-2edb-0bbab087194f\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"bottom\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Survivor_Space_Usage_used IS NOT NULL\\n| STATS survivor_used = MAX(LAST_OVER_TIME(java_lang_G1_Survivor_Space_Usage_used)), survivor_committed = MAX(LAST_OVER_TIME(java_lang_G1_Survivor_Space_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"94da83fd-50c4-0c4b-4368-2dbeace6f342\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Survivor_Space_Usage_used IS NOT NULL\\n| STATS survivor_used = MAX(LAST_OVER_TIME(java_lang_G1_Survivor_Space_Usage_used)), survivor_committed = MAX(LAST_OVER_TIME(java_lang_G1_Survivor_Space_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"survivor_used\", \"columnId\": \"49be82cb-fa60-0152-55e2-e070cbfe1287\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"survivor_committed\", \"columnId\": \"caf722cb-470f-5f82-2edb-0bbab087194f\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"survivor_used\", \"columnId\": \"49be82cb-fa60-0152-55e2-e070cbfe1287\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"survivor_committed\", \"columnId\": \"caf722cb-470f-5f82-2edb-0bbab087194f\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"02097029-1912-2d8b-d546-a7090a86b22f\", \"gridData\": {\"x\": 32, \"y\": 47, \"w\": 16, \"h\": 12, \"i\": \"02097029-1912-2d8b-d546-a7090a86b22f\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Old Generation Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"c5c53960-cba2-ad0e-a4e0-2d674234a6ed\", \"accessors\": [\"eb35efe6-a25c-b54c-162a-8fa0c380018e\", \"bb4008df-7765-f459-17e0-6ed2fe251afb\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"bottom\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Old_Gen_Usage_used IS NOT NULL\\n| STATS old_used = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_used)), old_committed = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"c5c53960-cba2-ad0e-a4e0-2d674234a6ed\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Old_Gen_Usage_used IS NOT NULL\\n| STATS old_used = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_used)), old_committed = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_committed)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"old_used\", \"columnId\": \"eb35efe6-a25c-b54c-162a-8fa0c380018e\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"old_committed\", \"columnId\": \"bb4008df-7765-f459-17e0-6ed2fe251afb\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"old_used\", \"columnId\": \"eb35efe6-a25c-b54c-162a-8fa0c380018e\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"old_committed\", \"columnId\": \"bb4008df-7765-f459-17e0-6ed2fe251afb\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"3a3b0df1-08c0-39e3-8230-d93e10385b2b\", \"gridData\": {\"x\": 0, \"y\": 62, \"w\": 24, \"h\": 10, \"i\": \"3a3b0df1-08c0-39e3-8230-d93e10385b2b\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Heap Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"60bdb82c-4134-8954-af16-c502b958b74c\", \"layerType\": \"data\", \"metricAccessor\": \"22d0d535-813b-e7e1-86f5-33db12e4a4bf\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 70.0}, {\"color\": \"#d6bf57\", \"stop\": 85.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 70.0}, {\"color\": \"#cc5642\", \"stop\": 85.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, ROUND(heap_used / heap_max * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 85\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"60bdb82c-4134-8954-af16-c502b958b74c\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, ROUND(heap_used / heap_max * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 85\"}, \"columns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"22d0d535-813b-e7e1-86f5-33db12e4a4bf\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"22d0d535-813b-e7e1-86f5-33db12e4a4bf\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"32ce32eb-2f51-9721-ce7b-8fa53745106e\", \"gridData\": {\"x\": 24, \"y\": 62, \"w\": 24, \"h\": 10, \"i\": \"32ce32eb-2f51-9721-ce7b-8fa53745106e\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Old Generation Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"aa9f8a37-b3dc-7331-fe8f-11b3024e450a\", \"layerType\": \"data\", \"metricAccessor\": \"c77a1338-fdfc-ffd6-8049-f8cf766d5600\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 60.0}, {\"color\": \"#d6bf57\", \"stop\": 80.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 60.0}, {\"color\": \"#cc5642\", \"stop\": 80.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Old_Gen_Usage_used IS NOT NULL\\n| STATS old_used = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_used)), old_max = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_max))\\n| EVAL old_util = CASE(old_max > 0, ROUND(old_used / old_max * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"aa9f8a37-b3dc-7331-fe8f-11b3024e450a\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Old_Gen_Usage_used IS NOT NULL\\n| STATS old_used = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_used)), old_max = MAX(LAST_OVER_TIME(java_lang_G1_Old_Gen_Usage_max))\\n| EVAL old_util = CASE(old_max > 0, ROUND(old_used / old_max * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"columns\": [{\"fieldName\": \"old_util\", \"columnId\": \"c77a1338-fdfc-ffd6-8049-f8cf766d5600\", \"label\": \"Old Gen Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"old_util\", \"columnId\": \"c77a1338-fdfc-ffd6-8049-f8cf766d5600\", \"label\": \"Old Gen Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"f8500f80-4568-4c02-949b-1663c5e4389b\", \"gridData\": {\"x\": 0, \"y\": 59, \"w\": 48, \"h\": 3, \"i\": \"f8500f80-4568-4c02-949b-1663c5e4389b\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Memory Utilization\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"72546a79-750a-4d02-b444-ec08e6041b3a\", \"gridData\": {\"x\": 0, \"y\": 44, \"w\": 48, \"h\": 3, \"i\": \"72546a79-750a-4d02-b444-ec08e6041b3a\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## G1 Memory Pools\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"eb05ed74-b8af-447b-94e4-d838ed36a419\", \"gridData\": {\"x\": 0, \"y\": 29, \"w\": 48, \"h\": 3, \"i\": \"eb05ed74-b8af-447b-94e4-d838ed36a419\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Garbage Collection\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"d314430e-510f-4d84-a6ca-fd4db8f63c06\", \"gridData\": {\"x\": 0, \"y\": 14, \"w\": 48, \"h\": 3, \"i\": \"d314430e-510f-4d84-a6ca-fd4db8f63c06\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Heap Memory\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}]", + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"meta\": {\"disabled\": false, \"negate\": false, \"alias\": null, \"type\": \"phrase\", \"key\": \"data_stream.dataset\", \"field\": \"data_stream.dataset\", \"params\": {\"query\": \"tomcat.otel\"}}, \"query\": {\"match_phrase\": {\"data_stream.dataset\": \"tomcat.otel\"}}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" + }, + "timeRestore": false, + "version": 1, + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"a18657f3-9386-7419-0c1e-db380f1b3b06\":{\"grow\":false,\"order\":0,\"width\":\"medium\",\"type\":\"optionsListControl\",\"explicitInput\":{\"id\":\"a18657f3-9386-7419-0c1e-db380f1b3b06\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"resource.attributes.host.name\",\"title\":\"Host\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}", + "showApplySelections": false + } + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-10-01T00:00:00Z", + "created_by": "admin", + "id": "apache_tomcat_otel-jvm-memory-gc", + "managed": false, + "references": [ + { + "type": "dashboard", + "id": "apache_tomcat_otel-overview", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-request-processing", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-thread-pool-connections", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-memory-gc", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-sessions-servlets", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-os-resources", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard" + }, + { + "type": "index-pattern", + "id": "metrics-*", + "name": "controlGroup_a18657f3-9386-7419-0c1e-db380f1b3b06:optionsListDataView" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0", + "updated_at": "2023-10-01T00:00:00Z", + "updated_by": "admin", + "version": "1" +} diff --git a/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-jvm-os-resources.json b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-jvm-os-resources.json new file mode 100644 index 00000000000..db38bafb0f1 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-jvm-os-resources.json @@ -0,0 +1,67 @@ +{ + "attributes": { + "title": "[Tomcat OTel] JVM & OS Resources", + "description": "JVM threading, CPU utilization, file descriptors, operating system resource monitoring, and web resource cache performance for the Apache Tomcat JVM process.", + "panelsJSON": "[{\"panelIndex\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\", \"gridData\": {\"x\": 0, \"y\": 0, \"w\": 48, \"h\": 2, \"i\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\"}, \"type\": \"links\", \"embeddableConfig\": {\"title\": \"Navigation\", \"enhancements\": {}, \"attributes\": {\"layout\": \"horizontal\", \"links\": [{\"id\": \"3af4ba12-6f83-488a-bdc9-0c7216a22d73\", \"order\": 0, \"label\": \"Overview\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard\"}, {\"id\": \"5909ede8-2eec-8644-b2c1-c28c00240a56\", \"order\": 1, \"label\": \"Request Processing\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard\"}, {\"id\": \"9dfd6ff5-60a6-d609-8f72-50cec07261e9\", \"order\": 2, \"label\": \"Thread Pool & Connections\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard\"}, {\"id\": \"6632c321-6dab-2198-f8fe-27c3e8abc5da\", \"order\": 3, \"label\": \"JVM Memory & GC\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard\"}, {\"id\": \"82660977-7ef5-2f6d-e57c-f38685be84e1\", \"order\": 4, \"label\": \"Sessions & Applications\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard\"}, {\"id\": \"2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f\", \"order\": 5, \"label\": \"JVM & OS Resources\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard\"}]}}}, {\"panelIndex\": \"0563dba8-e018-01bf-7e3c-91932750954e\", \"gridData\": {\"x\": 0, \"y\": 2, \"w\": 12, \"h\": 8, \"i\": \"0563dba8-e018-01bf-7e3c-91932750954e\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## [Tomcat OTel] JVM & OS Resources\\n\\nThis dashboard monitors JVM and operating system resource consumption:\\n- Process and system-wide CPU utilization\\n- System load average\\n- File descriptor usage and limits\\n- JVM thread counts (total, daemon, peak)\\n- Physical memory and swap usage\\n- Web resource cache hit/miss ratio and utilization\\n\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"c5aacd9a-2be1-b7f2-b49e-8bb0c27b5028\", \"gridData\": {\"x\": 12, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"c5aacd9a-2be1-b7f2-b49e-8bb0c27b5028\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Process CPU\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"abdfcaed-bfe1-6d2d-1d2c-c4ace98d942d\", \"layerType\": \"data\", \"metricAccessor\": \"dce269d9-27b7-71c2-b3eb-e1bfecc05422\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_ProcessCpuLoad IS NOT NULL\\n| STATS proc_cpu = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_ProcessCpuLoad))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"abdfcaed-bfe1-6d2d-1d2c-c4ace98d942d\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_ProcessCpuLoad IS NOT NULL\\n| STATS proc_cpu = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_ProcessCpuLoad))\"}, \"columns\": [{\"fieldName\": \"proc_cpu\", \"columnId\": \"dce269d9-27b7-71c2-b3eb-e1bfecc05422\", \"label\": \"Process CPU\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"proc_cpu\", \"columnId\": \"dce269d9-27b7-71c2-b3eb-e1bfecc05422\", \"label\": \"Process CPU\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d2677ae1-747a-04fa-ce76-b197a96f3697\", \"gridData\": {\"x\": 21, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"d2677ae1-747a-04fa-ce76-b197a96f3697\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"System CPU\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"8390384a-755b-08b8-df56-809e8735c0da\", \"layerType\": \"data\", \"metricAccessor\": \"070eaa50-59d7-9e08-df81-58c763f0c109\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_CpuLoad IS NOT NULL\\n| STATS sys_cpu = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_CpuLoad))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"8390384a-755b-08b8-df56-809e8735c0da\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_CpuLoad IS NOT NULL\\n| STATS sys_cpu = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_CpuLoad))\"}, \"columns\": [{\"fieldName\": \"sys_cpu\", \"columnId\": \"070eaa50-59d7-9e08-df81-58c763f0c109\", \"label\": \"System CPU\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"sys_cpu\", \"columnId\": \"070eaa50-59d7-9e08-df81-58c763f0c109\", \"label\": \"System CPU\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"f0618ac7-3522-03a7-a60e-a55ded62fc7c\", \"gridData\": {\"x\": 30, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"f0618ac7-3522-03a7-a60e-a55ded62fc7c\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"System Load Avg\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"486df89f-7dca-c86b-35ab-bacc5190fed4\", \"layerType\": \"data\", \"metricAccessor\": \"90765838-7926-7b1d-bf03-7e37fa030da9\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_SystemLoadAverage IS NOT NULL\\n| STATS load_avg = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_SystemLoadAverage))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"486df89f-7dca-c86b-35ab-bacc5190fed4\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_SystemLoadAverage IS NOT NULL\\n| STATS load_avg = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_SystemLoadAverage))\"}, \"columns\": [{\"fieldName\": \"load_avg\", \"columnId\": \"90765838-7926-7b1d-bf03-7e37fa030da9\", \"label\": \"Load Average (1m)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"load_avg\", \"columnId\": \"90765838-7926-7b1d-bf03-7e37fa030da9\", \"label\": \"Load Average (1m)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"821b57e2-fa5a-70fd-08c5-19b5dfa38250\", \"gridData\": {\"x\": 39, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"821b57e2-fa5a-70fd-08c5-19b5dfa38250\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Available CPUs\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"0c41927d-da34-cc41-3f46-a0156770e0d2\", \"layerType\": \"data\", \"metricAccessor\": \"b92b9571-5d71-f1e6-545b-9866059b145f\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_AvailableProcessors IS NOT NULL\\n| STATS cpus = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_AvailableProcessors))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"0c41927d-da34-cc41-3f46-a0156770e0d2\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_AvailableProcessors IS NOT NULL\\n| STATS cpus = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_AvailableProcessors))\"}, \"columns\": [{\"fieldName\": \"cpus\", \"columnId\": \"b92b9571-5d71-f1e6-545b-9866059b145f\", \"label\": \"Available CPUs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"cpus\", \"columnId\": \"b92b9571-5d71-f1e6-545b-9866059b145f\", \"label\": \"Available CPUs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"3140a03e-746e-0ea2-8fa4-3784db75c6c9\", \"gridData\": {\"x\": 12, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"3140a03e-746e-0ea2-8fa4-3784db75c6c9\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Open File Descriptors\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"d54e2441-ded6-afef-4e70-a7fc3b367770\", \"layerType\": \"data\", \"metricAccessor\": \"484f644f-dfc1-c904-e3dc-08c7f9b5e112\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"d54e2441-ded6-afef-4e70-a7fc3b367770\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount))\"}, \"columns\": [{\"fieldName\": \"open_fds\", \"columnId\": \"484f644f-dfc1-c904-e3dc-08c7f9b5e112\", \"label\": \"Open FDs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"open_fds\", \"columnId\": \"484f644f-dfc1-c904-e3dc-08c7f9b5e112\", \"label\": \"Open FDs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"aeb47c04-b406-08cc-27fb-a5ecadb99fd5\", \"gridData\": {\"x\": 21, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"aeb47c04-b406-08cc-27fb-a5ecadb99fd5\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"FD Utilization\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"74754ed0-64ad-201f-b37a-e3b0b17c2369\", \"layerType\": \"data\", \"metricAccessor\": \"965a3024-30cb-f623-9ccc-36bbba72cf70\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount))\\n| EVAL fd_util = CASE(max_fds > 0, open_fds / max_fds, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"74754ed0-64ad-201f-b37a-e3b0b17c2369\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount))\\n| EVAL fd_util = CASE(max_fds > 0, open_fds / max_fds, 0)\"}, \"columns\": [{\"fieldName\": \"fd_util\", \"columnId\": \"965a3024-30cb-f623-9ccc-36bbba72cf70\", \"label\": \"FD Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"fd_util\", \"columnId\": \"965a3024-30cb-f623-9ccc-36bbba72cf70\", \"label\": \"FD Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"0b77f98a-fa4d-efb0-b3c6-56aa40cf5cff\", \"gridData\": {\"x\": 30, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"0b77f98a-fa4d-efb0-b3c6-56aa40cf5cff\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"JVM Threads\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"eef0e741-1128-a636-bf1c-9e4dd8561872\", \"layerType\": \"data\", \"metricAccessor\": \"82889bf8-7083-4b1b-59b5-2551bd1f0dbf\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_ThreadCount IS NOT NULL\\n| STATS thread_count = MAX(LAST_OVER_TIME(java_lang_Threading_ThreadCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"eef0e741-1128-a636-bf1c-9e4dd8561872\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_ThreadCount IS NOT NULL\\n| STATS thread_count = MAX(LAST_OVER_TIME(java_lang_Threading_ThreadCount))\"}, \"columns\": [{\"fieldName\": \"thread_count\", \"columnId\": \"82889bf8-7083-4b1b-59b5-2551bd1f0dbf\", \"label\": \"JVM Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"thread_count\", \"columnId\": \"82889bf8-7083-4b1b-59b5-2551bd1f0dbf\", \"label\": \"JVM Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"2971de28-ec45-9dd2-e8a2-7b5f03c7726b\", \"gridData\": {\"x\": 39, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"2971de28-ec45-9dd2-e8a2-7b5f03c7726b\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Peak Threads\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"517430b5-3f21-f280-ab55-2f2fb6a7981f\", \"layerType\": \"data\", \"metricAccessor\": \"3b3e76cd-8d75-6e2f-6d60-0048be46dd6d\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_PeakThreadCount IS NOT NULL\\n| STATS peak = MAX(LAST_OVER_TIME(java_lang_Threading_PeakThreadCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"517430b5-3f21-f280-ab55-2f2fb6a7981f\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_PeakThreadCount IS NOT NULL\\n| STATS peak = MAX(LAST_OVER_TIME(java_lang_Threading_PeakThreadCount))\"}, \"columns\": [{\"fieldName\": \"peak\", \"columnId\": \"3b3e76cd-8d75-6e2f-6d60-0048be46dd6d\", \"label\": \"Peak Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"peak\", \"columnId\": \"3b3e76cd-8d75-6e2f-6d60-0048be46dd6d\", \"label\": \"Peak Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"b46388a7-a4ed-b35f-ba8d-25a0f5af7fe5\", \"gridData\": {\"x\": 0, \"y\": 13, \"w\": 24, \"h\": 12, \"i\": \"b46388a7-a4ed-b35f-ba8d-25a0f5af7fe5\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"CPU Load Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"1cfa2aec-0117-fe5d-b061-1a5d1e1d043a\", \"accessors\": [\"eb9d075c-5905-de5d-8e0c-988890a74a89\", \"e9b27d54-27f4-4a0c-74f2-f477b8405a65\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_CpuLoad IS NOT NULL\\n| STATS system_cpu = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_CpuLoad)), process_cpu = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_ProcessCpuLoad)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| EVAL system_pct = ROUND(system_cpu * 100, 1)\\n| EVAL process_pct = ROUND(process_cpu * 100, 1)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"1cfa2aec-0117-fe5d-b061-1a5d1e1d043a\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_CpuLoad IS NOT NULL\\n| STATS system_cpu = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_CpuLoad)), process_cpu = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_ProcessCpuLoad)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| EVAL system_pct = ROUND(system_cpu * 100, 1)\\n| EVAL process_pct = ROUND(process_cpu * 100, 1)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"system_pct\", \"columnId\": \"eb9d075c-5905-de5d-8e0c-988890a74a89\", \"label\": \"System CPU %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"process_pct\", \"columnId\": \"e9b27d54-27f4-4a0c-74f2-f477b8405a65\", \"label\": \"Process CPU %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"system_pct\", \"columnId\": \"eb9d075c-5905-de5d-8e0c-988890a74a89\", \"label\": \"System CPU %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"process_pct\", \"columnId\": \"e9b27d54-27f4-4a0c-74f2-f477b8405a65\", \"label\": \"Process CPU %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"07b6b074-1bc5-0644-a3cf-71b3adb0f343\", \"gridData\": {\"x\": 24, \"y\": 13, \"w\": 24, \"h\": 12, \"i\": \"07b6b074-1bc5-0644-a3cf-71b3adb0f343\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"System Load Average Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"04f3b7b9-c2a6-ecd9-cf94-3db2b5617c50\", \"accessors\": [\"ddbe2aa2-1137-b6bb-ac61-9ffaca6d845b\", \"314d9f8f-d011-fb12-bb1e-03d971beaa46\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_SystemLoadAverage IS NOT NULL\\n| STATS load_avg = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_SystemLoadAverage)), cpus = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_AvailableProcessors)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"04f3b7b9-c2a6-ecd9-cf94-3db2b5617c50\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_SystemLoadAverage IS NOT NULL\\n| STATS load_avg = MAX(AVG_OVER_TIME(java_lang_OperatingSystem_SystemLoadAverage)), cpus = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_AvailableProcessors)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"load_avg\", \"columnId\": \"ddbe2aa2-1137-b6bb-ac61-9ffaca6d845b\", \"label\": \"Load Average (1m)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"cpus\", \"columnId\": \"314d9f8f-d011-fb12-bb1e-03d971beaa46\", \"label\": \"Available CPUs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"load_avg\", \"columnId\": \"ddbe2aa2-1137-b6bb-ac61-9ffaca6d845b\", \"label\": \"Load Average (1m)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"cpus\", \"columnId\": \"314d9f8f-d011-fb12-bb1e-03d971beaa46\", \"label\": \"Available CPUs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"f6916e10-d3c0-2395-f11a-3e5e4925ce6c\", \"gridData\": {\"x\": 0, \"y\": 28, \"w\": 24, \"h\": 12, \"i\": \"f6916e10-d3c0-2395-f11a-3e5e4925ce6c\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"File Descriptor Usage Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"13d1237c-caa6-43bc-fcb8-410e254f8514\", \"accessors\": [\"c58fe038-3da3-320b-d9c0-8df96cfd8874\", \"b03f9018-5620-dd51-3df5-f321c9e0e0a3\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"13d1237c-caa6-43bc-fcb8-410e254f8514\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"open_fds\", \"columnId\": \"c58fe038-3da3-320b-d9c0-8df96cfd8874\", \"label\": \"Open FDs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_fds\", \"columnId\": \"b03f9018-5620-dd51-3df5-f321c9e0e0a3\", \"label\": \"Max FDs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"open_fds\", \"columnId\": \"c58fe038-3da3-320b-d9c0-8df96cfd8874\", \"label\": \"Open FDs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_fds\", \"columnId\": \"b03f9018-5620-dd51-3df5-f321c9e0e0a3\", \"label\": \"Max FDs\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"c9267947-7a8f-8d7a-dfc3-8c1e46991681\", \"gridData\": {\"x\": 24, \"y\": 28, \"w\": 24, \"h\": 12, \"i\": \"c9267947-7a8f-8d7a-dfc3-8c1e46991681\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"File Descriptor Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"53be9313-1cdb-4feb-efd6-72ff380e876b\", \"layerType\": \"data\", \"metricAccessor\": \"d70d359a-15af-a88d-e8dd-a1fe736a6853\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 50.0}, {\"color\": \"#d6bf57\", \"stop\": 80.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 50.0}, {\"color\": \"#cc5642\", \"stop\": 80.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount))\\n| EVAL fd_util = CASE(max_fds > 0, ROUND(open_fds / max_fds * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"53be9313-1cdb-4feb-efd6-72ff380e876b\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_OpenFileDescriptorCount IS NOT NULL\\n| STATS open_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_OpenFileDescriptorCount)), max_fds = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_MaxFileDescriptorCount))\\n| EVAL fd_util = CASE(max_fds > 0, ROUND(open_fds / max_fds * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"columns\": [{\"fieldName\": \"fd_util\", \"columnId\": \"d70d359a-15af-a88d-e8dd-a1fe736a6853\", \"label\": \"FD Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"fd_util\", \"columnId\": \"d70d359a-15af-a88d-e8dd-a1fe736a6853\", \"label\": \"FD Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"29214477-b85b-8291-068e-79068da4c01e\", \"gridData\": {\"x\": 0, \"y\": 43, \"w\": 24, \"h\": 12, \"i\": \"29214477-b85b-8291-068e-79068da4c01e\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"JVM Thread Count Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"260396c2-3dd1-0bc4-2a89-23e318f9b280\", \"accessors\": [\"d23faf8a-17a1-7ddd-1065-b1e0072507ef\", \"a1186e32-996e-e25d-6344-e1f81cb53bde\", \"f81bb31a-f323-5167-5d25-0890203cbbb5\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_ThreadCount IS NOT NULL\\n| STATS total = MAX(LAST_OVER_TIME(java_lang_Threading_ThreadCount)), daemon = MAX(LAST_OVER_TIME(java_lang_Threading_DaemonThreadCount)), peak = MAX(LAST_OVER_TIME(java_lang_Threading_PeakThreadCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"260396c2-3dd1-0bc4-2a89-23e318f9b280\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_ThreadCount IS NOT NULL\\n| STATS total = MAX(LAST_OVER_TIME(java_lang_Threading_ThreadCount)), daemon = MAX(LAST_OVER_TIME(java_lang_Threading_DaemonThreadCount)), peak = MAX(LAST_OVER_TIME(java_lang_Threading_PeakThreadCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"total\", \"columnId\": \"d23faf8a-17a1-7ddd-1065-b1e0072507ef\", \"label\": \"Total\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"daemon\", \"columnId\": \"a1186e32-996e-e25d-6344-e1f81cb53bde\", \"label\": \"Daemon\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"peak\", \"columnId\": \"f81bb31a-f323-5167-5d25-0890203cbbb5\", \"label\": \"Peak\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"total\", \"columnId\": \"d23faf8a-17a1-7ddd-1065-b1e0072507ef\", \"label\": \"Total\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"daemon\", \"columnId\": \"a1186e32-996e-e25d-6344-e1f81cb53bde\", \"label\": \"Daemon\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"peak\", \"columnId\": \"f81bb31a-f323-5167-5d25-0890203cbbb5\", \"label\": \"Peak\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"ebb55f17-a567-27e1-9583-d57e3ecac8b7\", \"gridData\": {\"x\": 24, \"y\": 43, \"w\": 24, \"h\": 12, \"i\": \"ebb55f17-a567-27e1-9583-d57e3ecac8b7\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"New Threads Started Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"f5cf7490-c5db-d48b-d004-00420520b050\", \"accessors\": [\"4349ad48-f9a4-59fa-0b66-a0cb0c492ed7\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_TotalStartedThreadCount IS NOT NULL\\n| STATS new_threads = SUM(DELTA(java_lang_Threading_TotalStartedThreadCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f5cf7490-c5db-d48b-d004-00420520b050\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Threading_TotalStartedThreadCount IS NOT NULL\\n| STATS new_threads = SUM(DELTA(java_lang_Threading_TotalStartedThreadCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"new_threads\", \"columnId\": \"4349ad48-f9a4-59fa-0b66-a0cb0c492ed7\", \"label\": \"New Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"new_threads\", \"columnId\": \"4349ad48-f9a4-59fa-0b66-a0cb0c492ed7\", \"label\": \"New Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"8109c688-6b90-a1d2-7c63-5696a72a8bb8\", \"gridData\": {\"x\": 0, \"y\": 58, \"w\": 24, \"h\": 12, \"i\": \"8109c688-6b90-a1d2-7c63-5696a72a8bb8\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"System Memory Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"f4993135-07b9-6231-8794-d03c8269a60e\", \"accessors\": [\"b1ef72d2-d7f7-8cd4-aa3c-159eaa7868ee\", \"4ae5b0a5-9c14-7c60-ac43-2d7bdcd9e032\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_FreeMemorySize IS NOT NULL\\n| STATS free_mem = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_FreeMemorySize)), total_mem = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_TotalMemorySize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f4993135-07b9-6231-8794-d03c8269a60e\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_FreeMemorySize IS NOT NULL\\n| STATS free_mem = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_FreeMemorySize)), total_mem = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_TotalMemorySize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"free_mem\", \"columnId\": \"b1ef72d2-d7f7-8cd4-aa3c-159eaa7868ee\", \"label\": \"Free Memory\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"total_mem\", \"columnId\": \"4ae5b0a5-9c14-7c60-ac43-2d7bdcd9e032\", \"label\": \"Total Memory\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"free_mem\", \"columnId\": \"b1ef72d2-d7f7-8cd4-aa3c-159eaa7868ee\", \"label\": \"Free Memory\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"total_mem\", \"columnId\": \"4ae5b0a5-9c14-7c60-ac43-2d7bdcd9e032\", \"label\": \"Total Memory\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"1c286dae-49ff-6a7b-ce8b-e3159432ae61\", \"gridData\": {\"x\": 24, \"y\": 58, \"w\": 24, \"h\": 12, \"i\": \"1c286dae-49ff-6a7b-ce8b-e3159432ae61\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Swap Space Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"d77a313d-fd29-3e42-bf39-c7617a4a65a7\", \"accessors\": [\"a697aa45-8d68-7d4a-b207-c3e529232f80\", \"a8a0bc12-bdfd-56ec-2dc7-13f631dfb77b\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_FreeSwapSpaceSize IS NOT NULL\\n| STATS free_swap = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_FreeSwapSpaceSize)), total_swap = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_TotalSwapSpaceSize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"d77a313d-fd29-3e42-bf39-c7617a4a65a7\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_OperatingSystem_FreeSwapSpaceSize IS NOT NULL\\n| STATS free_swap = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_FreeSwapSpaceSize)), total_swap = MAX(LAST_OVER_TIME(java_lang_OperatingSystem_TotalSwapSpaceSize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"free_swap\", \"columnId\": \"a697aa45-8d68-7d4a-b207-c3e529232f80\", \"label\": \"Free Swap\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"total_swap\", \"columnId\": \"a8a0bc12-bdfd-56ec-2dc7-13f631dfb77b\", \"label\": \"Total Swap\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"free_swap\", \"columnId\": \"a697aa45-8d68-7d4a-b207-c3e529232f80\", \"label\": \"Free Swap\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"total_swap\", \"columnId\": \"a8a0bc12-bdfd-56ec-2dc7-13f631dfb77b\", \"label\": \"Total Swap\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"f91c2a82-8a13-4504-bc8b-9e65f6e09374\", \"gridData\": {\"x\": 0, \"y\": 73, \"w\": 24, \"h\": 12, \"i\": \"f91c2a82-8a13-4504-bc8b-9e65f6e09374\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Cache Hit / Miss Ratio Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"8db1573d-42a4-41ac-a303-b39b2fdb468e\", \"accessors\": [\"ebb8b9ab-58f9-43ba-9918-c07ec28b6450\", \"ef85c3ef-aa7d-4d4b-9855-a196fc339207\"], \"layerType\": \"data\", \"seriesType\": \"area_stacked\", \"xAccessor\": \"2ba0f147-cfa8-431c-91c1-1b4dd5314d60\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_hitCount IS NOT NULL\\n| STATS hits = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_hitCount)), lookups = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_lookupCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| EVAL hit_pct = CASE(lookups > 0, ROUND(hits / lookups * 100, 1), 0)\\n| EVAL miss_pct = CASE(lookups > 0, ROUND((lookups - hits) / lookups * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"8db1573d-42a4-41ac-a303-b39b2fdb468e\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_hitCount IS NOT NULL\\n| STATS hits = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_hitCount)), lookups = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_lookupCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| EVAL hit_pct = CASE(lookups > 0, ROUND(hits / lookups * 100, 1), 0)\\n| EVAL miss_pct = CASE(lookups > 0, ROUND((lookups - hits) / lookups * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"hit_pct\", \"columnId\": \"ebb8b9ab-58f9-43ba-9918-c07ec28b6450\", \"label\": \"Hit %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"miss_pct\", \"columnId\": \"ef85c3ef-aa7d-4d4b-9855-a196fc339207\", \"label\": \"Miss %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"2ba0f147-cfa8-431c-91c1-1b4dd5314d60\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"hit_pct\", \"columnId\": \"ebb8b9ab-58f9-43ba-9918-c07ec28b6450\", \"label\": \"Hit %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"miss_pct\", \"columnId\": \"ef85c3ef-aa7d-4d4b-9855-a196fc339207\", \"label\": \"Miss %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"2ba0f147-cfa8-431c-91c1-1b4dd5314d60\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"4c966d4d-9bfc-401d-b8c2-504f1c6cb166\", \"gridData\": {\"x\": 24, \"y\": 73, \"w\": 24, \"h\": 12, \"i\": \"4c966d4d-9bfc-401d-b8c2-504f1c6cb166\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Cache Size vs Max Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"ea0db2ed-96b9-4809-9e4b-3d28050d15cb\", \"accessors\": [\"223a73c1-5941-4005-926b-c94e68955d7e\", \"4a31e486-9edf-4b67-b23d-2afbcdf68131\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"2785af89-07ac-458c-bc56-de381e64ab8a\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_size IS NOT NULL\\n| STATS cache_size = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_size)), max_size = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_maxSize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"ea0db2ed-96b9-4809-9e4b-3d28050d15cb\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_size IS NOT NULL\\n| STATS cache_size = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_size)), max_size = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_maxSize)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"cache_size\", \"columnId\": \"223a73c1-5941-4005-926b-c94e68955d7e\", \"label\": \"Current Size\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_size\", \"columnId\": \"4a31e486-9edf-4b67-b23d-2afbcdf68131\", \"label\": \"Max Size\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"2785af89-07ac-458c-bc56-de381e64ab8a\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"cache_size\", \"columnId\": \"223a73c1-5941-4005-926b-c94e68955d7e\", \"label\": \"Current Size\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_size\", \"columnId\": \"4a31e486-9edf-4b67-b23d-2afbcdf68131\", \"label\": \"Max Size\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"2785af89-07ac-458c-bc56-de381e64ab8a\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"034fa72d-e201-425f-95d7-0848d3e23677\", \"gridData\": {\"x\": 0, \"y\": 85, \"w\": 24, \"h\": 12, \"i\": \"034fa72d-e201-425f-95d7-0848d3e23677\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Cache Lookup Rate Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"43b5a67e-7dd9-4f59-8e47-62032b4e9ea7\", \"accessors\": [\"d7bf597b-3d74-4fa1-af1d-b11c6411f3ec\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"77930544-1f30-4dd3-96a9-97a0166ab5d6\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_lookupCount IS NOT NULL\\n| STATS lookups = SUM(DELTA(Catalina_WebResourceRoot_lookupCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"43b5a67e-7dd9-4f59-8e47-62032b4e9ea7\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_lookupCount IS NOT NULL\\n| STATS lookups = SUM(DELTA(Catalina_WebResourceRoot_lookupCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"lookups\", \"columnId\": \"d7bf597b-3d74-4fa1-af1d-b11c6411f3ec\", \"label\": \"Lookups\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"77930544-1f30-4dd3-96a9-97a0166ab5d6\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"lookups\", \"columnId\": \"d7bf597b-3d74-4fa1-af1d-b11c6411f3ec\", \"label\": \"Lookups\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"77930544-1f30-4dd3-96a9-97a0166ab5d6\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"64416542-b00d-48e6-85db-8659b46a97e0\", \"gridData\": {\"x\": 24, \"y\": 85, \"w\": 24, \"h\": 6, \"i\": \"64416542-b00d-48e6-85db-8659b46a97e0\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Cache Hit Ratio\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"aabc57d8-f39d-4c96-b55a-03dd4e268c80\", \"layerType\": \"data\", \"metricAccessor\": \"6ba7fbb2-070d-4bdd-8f6d-7bf4cd0cab7f\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_hitCount IS NOT NULL\\n| STATS hits = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_hitCount)), lookups = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_lookupCount))\\n| EVAL hit_ratio = CASE(lookups > 0, ROUND(hits / lookups * 100, 1), 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"aabc57d8-f39d-4c96-b55a-03dd4e268c80\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_hitCount IS NOT NULL\\n| STATS hits = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_hitCount)), lookups = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_lookupCount))\\n| EVAL hit_ratio = CASE(lookups > 0, ROUND(hits / lookups * 100, 1), 0)\"}, \"columns\": [{\"fieldName\": \"hit_ratio\", \"columnId\": \"6ba7fbb2-070d-4bdd-8f6d-7bf4cd0cab7f\", \"label\": \"Hit Ratio\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}], \"allColumns\": [{\"fieldName\": \"hit_ratio\", \"columnId\": \"6ba7fbb2-070d-4bdd-8f6d-7bf4cd0cab7f\", \"label\": \"Hit Ratio\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"707c7b52-8683-407b-b190-73041be79860\", \"gridData\": {\"x\": 24, \"y\": 91, \"w\": 24, \"h\": 6, \"i\": \"707c7b52-8683-407b-b190-73041be79860\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Cache Entries\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"a3f13b88-c103-4202-908a-37138b0f36da\", \"layerType\": \"data\", \"metricAccessor\": \"86466d6a-26f7-4cad-89b3-647ddb03fbec\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_size IS NOT NULL\\n| STATS entries = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_size))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"a3f13b88-c103-4202-908a-37138b0f36da\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebResourceRoot_size IS NOT NULL\\n| STATS entries = MAX(LAST_OVER_TIME(Catalina_WebResourceRoot_size))\"}, \"columns\": [{\"fieldName\": \"entries\", \"columnId\": \"86466d6a-26f7-4cad-89b3-647ddb03fbec\", \"label\": \"Entries\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"entries\", \"columnId\": \"86466d6a-26f7-4cad-89b3-647ddb03fbec\", \"label\": \"Entries\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"a22d29d8-7e5a-4f4e-8f84-a7ba456b9431\", \"gridData\": {\"x\": 0, \"y\": 70, \"w\": 48, \"h\": 3, \"i\": \"a22d29d8-7e5a-4f4e-8f84-a7ba456b9431\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Resource Cache\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"8dc5b4d6-04e8-4f1b-9cbe-3e58b08eff1f\", \"gridData\": {\"x\": 0, \"y\": 55, \"w\": 48, \"h\": 3, \"i\": \"8dc5b4d6-04e8-4f1b-9cbe-3e58b08eff1f\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## System Memory\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"fbef1c62-43e3-4203-b95d-d6e6aaf73d50\", \"gridData\": {\"x\": 0, \"y\": 40, \"w\": 48, \"h\": 3, \"i\": \"fbef1c62-43e3-4203-b95d-d6e6aaf73d50\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## JVM Threads\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"80a1cada-7a78-4e96-a280-8ddf4be90cdc\", \"gridData\": {\"x\": 0, \"y\": 25, \"w\": 48, \"h\": 3, \"i\": \"80a1cada-7a78-4e96-a280-8ddf4be90cdc\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## File Descriptors\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"07981d5e-2623-434a-aa46-64505a8e385d\", \"gridData\": {\"x\": 0, \"y\": 10, \"w\": 48, \"h\": 3, \"i\": \"07981d5e-2623-434a-aa46-64505a8e385d\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## CPU Utilization\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}]", + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"meta\": {\"disabled\": false, \"negate\": false, \"alias\": null, \"type\": \"phrase\", \"key\": \"data_stream.dataset\", \"field\": \"data_stream.dataset\", \"params\": {\"query\": \"tomcat.otel\"}}, \"query\": {\"match_phrase\": {\"data_stream.dataset\": \"tomcat.otel\"}}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" + }, + "timeRestore": false, + "version": 1, + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"a18657f3-9386-7419-0c1e-db380f1b3b06\":{\"grow\":false,\"order\":0,\"width\":\"medium\",\"type\":\"optionsListControl\",\"explicitInput\":{\"id\":\"a18657f3-9386-7419-0c1e-db380f1b3b06\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"resource.attributes.host.name\",\"title\":\"Host\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}", + "showApplySelections": false + } + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-10-01T00:00:00Z", + "created_by": "admin", + "id": "apache_tomcat_otel-jvm-os-resources", + "managed": false, + "references": [ + { + "type": "dashboard", + "id": "apache_tomcat_otel-overview", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-request-processing", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-thread-pool-connections", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-memory-gc", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-sessions-servlets", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-os-resources", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard" + }, + { + "type": "index-pattern", + "id": "metrics-*", + "name": "controlGroup_a18657f3-9386-7419-0c1e-db380f1b3b06:optionsListDataView" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0", + "updated_at": "2023-10-01T00:00:00Z", + "updated_by": "admin", + "version": "1" +} diff --git a/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-overview.json b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-overview.json new file mode 100644 index 00000000000..1118d6b92dd --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-overview.json @@ -0,0 +1,67 @@ +{ + "attributes": { + "title": "[Tomcat OTel] Overview", + "description": "High-level health and performance overview for Apache Tomcat, covering golden signals: latency, traffic, errors, and saturation.", + "panelsJSON": "[{\"panelIndex\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\", \"gridData\": {\"x\": 0, \"y\": 0, \"w\": 48, \"h\": 2, \"i\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\"}, \"type\": \"links\", \"embeddableConfig\": {\"title\": \"Navigation\", \"enhancements\": {}, \"attributes\": {\"layout\": \"horizontal\", \"links\": [{\"id\": \"3af4ba12-6f83-488a-bdc9-0c7216a22d73\", \"order\": 0, \"label\": \"Overview\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard\"}, {\"id\": \"5909ede8-2eec-8644-b2c1-c28c00240a56\", \"order\": 1, \"label\": \"Request Processing\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard\"}, {\"id\": \"9dfd6ff5-60a6-d609-8f72-50cec07261e9\", \"order\": 2, \"label\": \"Thread Pool & Connections\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard\"}, {\"id\": \"6632c321-6dab-2198-f8fe-27c3e8abc5da\", \"order\": 3, \"label\": \"JVM Memory & GC\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard\"}, {\"id\": \"82660977-7ef5-2f6d-e57c-f38685be84e1\", \"order\": 4, \"label\": \"Sessions & Applications\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard\"}, {\"id\": \"2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f\", \"order\": 5, \"label\": \"JVM & OS Resources\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard\"}]}}}, {\"panelIndex\": \"0563dba8-e018-01bf-7e3c-91932750954e\", \"gridData\": {\"x\": 0, \"y\": 2, \"w\": 16, \"h\": 12, \"i\": \"0563dba8-e018-01bf-7e3c-91932750954e\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## [Tomcat OTel] Overview\\n\\nThis dashboard provides a high-level view of Apache Tomcat health and performance:\\n- Request throughput, error rates, and average latency\\n- Thread pool and connection utilization\\n- JVM heap memory consumption\\n- HTTP session counts and GC activity\\n\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"d00be7ec-c738-f775-8232-14b5aaa25458\", \"gridData\": {\"x\": 16, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"d00be7ec-c738-f775-8232-14b5aaa25458\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Total Requests\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"a3add44f-304e-8f9c-419d-12d64c0af768\", \"layerType\": \"data\", \"metricAccessor\": \"c8fc641c-15f5-7536-a782-5602a275c81e\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS total_requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"a3add44f-304e-8f9c-419d-12d64c0af768\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS total_requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\"}, \"columns\": [{\"fieldName\": \"total_requests\", \"columnId\": \"c8fc641c-15f5-7536-a782-5602a275c81e\", \"label\": \"Total Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"total_requests\", \"columnId\": \"c8fc641c-15f5-7536-a782-5602a275c81e\", \"label\": \"Total Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"75e919ca-6ddc-278f-3c3f-13265e0ac701\", \"gridData\": {\"x\": 24, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"75e919ca-6ddc-278f-3c3f-13265e0ac701\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Error Rate\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"33757f64-a90b-340b-f653-eacf1040e265\", \"layerType\": \"data\", \"metricAccessor\": \"f8c5c3ec-f2de-fb81-d912-5cc485aaa6c7\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount))\\n| EVAL error_rate = CASE(requests > 0, errors / requests, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"33757f64-a90b-340b-f653-eacf1040e265\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount))\\n| EVAL error_rate = CASE(requests > 0, errors / requests, 0)\"}, \"columns\": [{\"fieldName\": \"error_rate\", \"columnId\": \"f8c5c3ec-f2de-fb81-d912-5cc485aaa6c7\", \"label\": \"Error Rate\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"error_rate\", \"columnId\": \"f8c5c3ec-f2de-fb81-d912-5cc485aaa6c7\", \"label\": \"Error Rate\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"58fe4508-091a-efbd-94e0-14f2b6f72595\", \"gridData\": {\"x\": 32, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"58fe4508-091a-efbd-94e0-14f2b6f72595\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Avg Latency\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"de5a57b6-b002-cb9e-721b-98abb1e3de55\", \"layerType\": \"data\", \"metricAccessor\": \"bd03d5a5-9104-65c8-eab7-5dd69b7683da\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL\\n| STATS proc_time = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), req_count = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\\n| EVAL avg_latency = CASE(req_count > 0, ROUND(proc_time / req_count, 1), 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"de5a57b6-b002-cb9e-721b-98abb1e3de55\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL\\n| STATS proc_time = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), req_count = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\\n| EVAL avg_latency = CASE(req_count > 0, ROUND(proc_time / req_count, 1), 0)\"}, \"columns\": [{\"fieldName\": \"avg_latency\", \"columnId\": \"bd03d5a5-9104-65c8-eab7-5dd69b7683da\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \" ms\"}}}}], \"allColumns\": [{\"fieldName\": \"avg_latency\", \"columnId\": \"bd03d5a5-9104-65c8-eab7-5dd69b7683da\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \" ms\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"8bf4a25d-16e5-52e2-638f-ead04a8ad88b\", \"gridData\": {\"x\": 40, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"8bf4a25d-16e5-52e2-638f-ead04a8ad88b\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Active Sessions\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"f7855997-9e22-aaf0-2d3c-34ce11985f51\", \"layerType\": \"data\", \"metricAccessor\": \"12a6e96b-3907-f9b7-3867-47ce471ef61f\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active_sessions = SUM(LAST_OVER_TIME(Catalina_Manager_activeSessions))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f7855997-9e22-aaf0-2d3c-34ce11985f51\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active_sessions = SUM(LAST_OVER_TIME(Catalina_Manager_activeSessions))\"}, \"columns\": [{\"fieldName\": \"active_sessions\", \"columnId\": \"12a6e96b-3907-f9b7-3867-47ce471ef61f\", \"label\": \"Active Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"active_sessions\", \"columnId\": \"12a6e96b-3907-f9b7-3867-47ce471ef61f\", \"label\": \"Active Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"abb80b39-4d6d-812e-581b-833cd8022ef2\", \"gridData\": {\"x\": 16, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"abb80b39-4d6d-812e-581b-833cd8022ef2\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Thread Utilization\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"d7247a85-b0b5-305d-a758-3f023fab171d\", \"layerType\": \"data\", \"metricAccessor\": \"1d0cacce-6cf5-4918-0c3d-782fdf75e45b\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, busy / max_threads, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"d7247a85-b0b5-305d-a758-3f023fab171d\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, busy / max_threads, 0)\"}, \"columns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"1d0cacce-6cf5-4918-0c3d-782fdf75e45b\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"1d0cacce-6cf5-4918-0c3d-782fdf75e45b\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"e89f4bfc-81eb-c5c8-e959-8b584e167d86\", \"gridData\": {\"x\": 24, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"e89f4bfc-81eb-c5c8-e959-8b584e167d86\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Heap Utilization\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"6a261722-8393-b8ba-0d0a-571df89afef1\", \"layerType\": \"data\", \"metricAccessor\": \"6558cfe1-f86b-5571-77a8-ea3b9b12de63\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, heap_used / heap_max, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"6a261722-8393-b8ba-0d0a-571df89afef1\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, heap_used / heap_max, 0)\"}, \"columns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"6558cfe1-f86b-5571-77a8-ea3b9b12de63\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"6558cfe1-f86b-5571-77a8-ea3b9b12de63\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"51886af3-3c16-7cc4-4c77-fbde251259b8\", \"gridData\": {\"x\": 32, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"51886af3-3c16-7cc4-4c77-fbde251259b8\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Young GC Collections\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"1a1bd199-f9d4-c60b-3394-0d79e58b8aa6\", \"layerType\": \"data\", \"metricAccessor\": \"fe3bf3f6-cda0-4dcd-0eae-b395d4bce996\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL\\n| STATS young_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"1a1bd199-f9d4-c60b-3394-0d79e58b8aa6\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_G1_Young_Generation_CollectionCount IS NOT NULL\\n| STATS young_gc = MAX(LAST_OVER_TIME(java_lang_G1_Young_Generation_CollectionCount))\"}, \"columns\": [{\"fieldName\": \"young_gc\", \"columnId\": \"fe3bf3f6-cda0-4dcd-0eae-b395d4bce996\", \"label\": \"Young GC Collections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"young_gc\", \"columnId\": \"fe3bf3f6-cda0-4dcd-0eae-b395d4bce996\", \"label\": \"Young GC Collections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"62655c32-f7ba-a9d4-a3d1-4a71d87ea174\", \"gridData\": {\"x\": 40, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"62655c32-f7ba-a9d4-a3d1-4a71d87ea174\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"JVM Uptime\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"754c1d09-bfff-98ff-f622-85d1007498e4\", \"layerType\": \"data\", \"metricAccessor\": \"2f12d41e-267b-343b-2251-34c7aeb15d99\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Runtime_Uptime IS NOT NULL\\n| STATS uptime_ms = MAX(LAST_OVER_TIME(java_lang_Runtime_Uptime))\\n| EVAL uptime_s = ROUND(uptime_ms / 1000, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"754c1d09-bfff-98ff-f622-85d1007498e4\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Runtime_Uptime IS NOT NULL\\n| STATS uptime_ms = MAX(LAST_OVER_TIME(java_lang_Runtime_Uptime))\\n| EVAL uptime_s = ROUND(uptime_ms / 1000, 0)\"}, \"columns\": [{\"fieldName\": \"uptime_s\", \"columnId\": \"2f12d41e-267b-343b-2251-34c7aeb15d99\", \"label\": \"JVM Uptime\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"duration\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"uptime_s\", \"columnId\": \"2f12d41e-267b-343b-2251-34c7aeb15d99\", \"label\": \"JVM Uptime\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"duration\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"9c36922d-035c-6805-37f5-29346e9e2e45\", \"gridData\": {\"x\": 0, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"9c36922d-035c-6805-37f5-29346e9e2e45\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Request Throughput Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"e9800d59-f83c-7102-689e-1de6541fb15e\", \"accessors\": [\"334e83ad-3051-e9fa-28c0-e40866706860\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"e9800d59-f83c-7102-689e-1de6541fb15e\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"requests\", \"columnId\": \"334e83ad-3051-e9fa-28c0-e40866706860\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"requests\", \"columnId\": \"334e83ad-3051-e9fa-28c0-e40866706860\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"518a8b8a-2d1f-030a-9e45-2de26e4f5d8a\", \"gridData\": {\"x\": 24, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"518a8b8a-2d1f-030a-9e45-2de26e4f5d8a\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Error Count Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"313ee559-1b17-0ec9-caf5-c3e97676b11a\", \"accessors\": [\"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL\\n| STATS errors = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"313ee559-1b17-0ec9-caf5-c3e97676b11a\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL\\n| STATS errors = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"errors\", \"columnId\": \"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"errors\", \"columnId\": \"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"4bd72f75-5669-3e63-df78-474f49565ecd\", \"gridData\": {\"x\": 0, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"4bd72f75-5669-3e63-df78-474f49565ecd\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Thread Pool Utilization Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"8a0e3c22-725d-edbb-4426-29b11fc3bc69\", \"accessors\": [\"548acbf7-80df-d206-cf3f-28f3c99e9746\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL utilization = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"8a0e3c22-725d-edbb-4426-29b11fc3bc69\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL utilization = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"utilization\", \"columnId\": \"548acbf7-80df-d206-cf3f-28f3c99e9746\", \"label\": \"Utilization %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"utilization\", \"columnId\": \"548acbf7-80df-d206-cf3f-28f3c99e9746\", \"label\": \"Utilization %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"ab26e4db-b3af-b281-6f6d-3960ebb3ba88\", \"gridData\": {\"x\": 24, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"ab26e4db-b3af-b281-6f6d-3960ebb3ba88\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Heap Memory Usage Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"f0d9ecde-6012-17e7-9365-b158efe98961\", \"accessors\": [\"0e34f4a0-6622-5b1a-a0ac-2108768d4d32\", \"63400a19-f455-9069-592c-7feb0ada6fc6\", \"9a771b13-ea72-7ba4-ab31-fc6c4598ff1d\"], \"layerType\": \"data\", \"seriesType\": \"area_unstacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area_unstacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_committed)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f0d9ecde-6012-17e7-9365-b158efe98961\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_committed = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_committed)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"heap_used\", \"columnId\": \"0e34f4a0-6622-5b1a-a0ac-2108768d4d32\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_committed\", \"columnId\": \"63400a19-f455-9069-592c-7feb0ada6fc6\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_max\", \"columnId\": \"9a771b13-ea72-7ba4-ab31-fc6c4598ff1d\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"heap_used\", \"columnId\": \"0e34f4a0-6622-5b1a-a0ac-2108768d4d32\", \"label\": \"Used\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_committed\", \"columnId\": \"63400a19-f455-9069-592c-7feb0ada6fc6\", \"label\": \"Committed\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"heap_max\", \"columnId\": \"9a771b13-ea72-7ba4-ab31-fc6c4598ff1d\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"3b3b1ae6-b66a-ba46-6ce3-32dc839b7e69\", \"gridData\": {\"x\": 0, \"y\": 44, \"w\": 16, \"h\": 10, \"i\": \"3b3b1ae6-b66a-ba46-6ce3-32dc839b7e69\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Thread Pool Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"1ecb1349-6796-1d25-665e-7ff255e452c3\", \"layerType\": \"data\", \"metricAccessor\": \"dd5f32b9-7f5a-2698-a8b8-4275ffd5af68\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 60.0}, {\"color\": \"#d6bf57\", \"stop\": 80.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 60.0}, {\"color\": \"#cc5642\", \"stop\": 80.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"1ecb1349-6796-1d25-665e-7ff255e452c3\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"columns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"dd5f32b9-7f5a-2698-a8b8-4275ffd5af68\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"dd5f32b9-7f5a-2698-a8b8-4275ffd5af68\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"22602d44-d13d-0312-58ac-3ba9f926a160\", \"gridData\": {\"x\": 16, \"y\": 44, \"w\": 16, \"h\": 10, \"i\": \"22602d44-d13d-0312-58ac-3ba9f926a160\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Connection Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"191e0c64-d9ea-9c47-0027-0d40eb2c0398\", \"layerType\": \"data\", \"metricAccessor\": \"b2d3edc8-ede7-bcbd-d565-d15acd0792de\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 50.0}, {\"color\": \"#d6bf57\", \"stop\": 80.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 50.0}, {\"color\": \"#cc5642\", \"stop\": 80.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\\n| EVAL conn_util = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"191e0c64-d9ea-9c47-0027-0d40eb2c0398\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\\n| EVAL conn_util = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"columns\": [{\"fieldName\": \"conn_util\", \"columnId\": \"b2d3edc8-ede7-bcbd-d565-d15acd0792de\", \"label\": \"Connection Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"conn_util\", \"columnId\": \"b2d3edc8-ede7-bcbd-d565-d15acd0792de\", \"label\": \"Connection Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"8a22f1f4-fd92-af6e-18cc-d6610cce391c\", \"gridData\": {\"x\": 32, \"y\": 44, \"w\": 16, \"h\": 10, \"i\": \"8a22f1f4-fd92-af6e-18cc-d6610cce391c\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Heap Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"60bdb82c-4134-8954-af16-c502b958b74c\", \"layerType\": \"data\", \"metricAccessor\": \"22d0d535-813b-e7e1-86f5-33db12e4a4bf\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 70.0}, {\"color\": \"#d6bf57\", \"stop\": 85.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 70.0}, {\"color\": \"#cc5642\", \"stop\": 85.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, ROUND(heap_used / heap_max * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 85\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"60bdb82c-4134-8954-af16-c502b958b74c\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE java_lang_Memory_HeapMemoryUsage_used IS NOT NULL\\n| STATS heap_used = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_used)), heap_max = MAX(LAST_OVER_TIME(java_lang_Memory_HeapMemoryUsage_max))\\n| EVAL heap_util = CASE(heap_max > 0, ROUND(heap_used / heap_max * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 85\"}, \"columns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"22d0d535-813b-e7e1-86f5-33db12e4a4bf\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"heap_util\", \"columnId\": \"22d0d535-813b-e7e1-86f5-33db12e4a4bf\", \"label\": \"Heap Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"10b4343e-2a93-d6d2-509b-41a56abb939d\", \"gridData\": {\"x\": 0, \"y\": 57, \"w\": 48, \"h\": 15, \"i\": \"10b4343e-2a93-d6d2-509b-41a56abb939d\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Connector Performance Summary\", \"visualizationType\": \"lnsDatatable\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"columns\": [{\"columnId\": \"64482e4a-0d16-5a48-bd10-37fb6fc673d3\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"07f75932-83dc-a7c6-b23d-024e34c98ef2\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"3ca5693a-5206-f460-5d5b-0b8f3aa6e088\", \"isTransposed\": false, \"isMetric\": true}], \"layerId\": \"30f30488-a430-82da-7398-5454c259ad34\", \"layerType\": \"data\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount)), bytes_sent = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesSent)), bytes_recv = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesReceived)), proc_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime)) BY attributes.name\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| SORT requests DESC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"30f30488-a430-82da-7398-5454c259ad34\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount)), bytes_sent = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesSent)), bytes_recv = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesReceived)), proc_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime)) BY attributes.name\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| SORT requests DESC\"}, \"columns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"64482e4a-0d16-5a48-bd10-37fb6fc673d3\", \"label\": \"Connector\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"bytes_sent\", \"columnId\": \"07f75932-83dc-a7c6-b23d-024e34c98ef2\", \"label\": \"Bytes Sent\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"bytes_recv\", \"columnId\": \"3ca5693a-5206-f460-5d5b-0b8f3aa6e088\", \"label\": \"Bytes Received\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"64482e4a-0d16-5a48-bd10-37fb6fc673d3\", \"label\": \"Connector\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"bytes_sent\", \"columnId\": \"07f75932-83dc-a7c6-b23d-024e34c98ef2\", \"label\": \"Bytes Sent\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"bytes_recv\", \"columnId\": \"3ca5693a-5206-f460-5d5b-0b8f3aa6e088\", \"label\": \"Bytes Received\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d6ee597a-1c98-40b9-99ab-fb71cdc788cc\", \"gridData\": {\"x\": 0, \"y\": 54, \"w\": 48, \"h\": 3, \"i\": \"d6ee597a-1c98-40b9-99ab-fb71cdc788cc\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Connector Summary\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"53ecb976-6f55-41c2-ad9a-2230af99eedf\", \"gridData\": {\"x\": 0, \"y\": 29, \"w\": 48, \"h\": 3, \"i\": \"53ecb976-6f55-41c2-ad9a-2230af99eedf\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Resource Utilization\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"f789b6cc-8cae-48a1-947f-4fe09dfd2f27\", \"gridData\": {\"x\": 0, \"y\": 14, \"w\": 48, \"h\": 3, \"i\": \"f789b6cc-8cae-48a1-947f-4fe09dfd2f27\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Golden Signals\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}]", + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"meta\": {\"disabled\": false, \"negate\": false, \"alias\": null, \"type\": \"phrase\", \"key\": \"data_stream.dataset\", \"field\": \"data_stream.dataset\", \"params\": {\"query\": \"tomcat.otel\"}}, \"query\": {\"match_phrase\": {\"data_stream.dataset\": \"tomcat.otel\"}}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" + }, + "timeRestore": false, + "version": 1, + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"a18657f3-9386-7419-0c1e-db380f1b3b06\":{\"grow\":false,\"order\":0,\"width\":\"medium\",\"type\":\"optionsListControl\",\"explicitInput\":{\"id\":\"a18657f3-9386-7419-0c1e-db380f1b3b06\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"resource.attributes.host.name\",\"title\":\"Host\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}", + "showApplySelections": false + } + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-10-01T00:00:00Z", + "created_by": "admin", + "id": "apache_tomcat_otel-overview", + "managed": false, + "references": [ + { + "type": "dashboard", + "id": "apache_tomcat_otel-overview", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-request-processing", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-thread-pool-connections", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-memory-gc", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-sessions-servlets", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-os-resources", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard" + }, + { + "type": "index-pattern", + "id": "metrics-*", + "name": "controlGroup_a18657f3-9386-7419-0c1e-db380f1b3b06:optionsListDataView" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0", + "updated_at": "2023-10-01T00:00:00Z", + "updated_by": "admin", + "version": "1" +} diff --git a/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-request-processing.json b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-request-processing.json new file mode 100644 index 00000000000..5218b31c689 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-request-processing.json @@ -0,0 +1,67 @@ +{ + "attributes": { + "title": "[Tomcat OTel] Request Processing", + "description": "Detailed request processing pipeline metrics including per-connector throughput, latency, error rates, and per-servlet performance.", + "panelsJSON": "[{\"panelIndex\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\", \"gridData\": {\"x\": 0, \"y\": 0, \"w\": 48, \"h\": 2, \"i\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\"}, \"type\": \"links\", \"embeddableConfig\": {\"title\": \"Navigation\", \"enhancements\": {}, \"attributes\": {\"layout\": \"horizontal\", \"links\": [{\"id\": \"3af4ba12-6f83-488a-bdc9-0c7216a22d73\", \"order\": 0, \"label\": \"Overview\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard\"}, {\"id\": \"5909ede8-2eec-8644-b2c1-c28c00240a56\", \"order\": 1, \"label\": \"Request Processing\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard\"}, {\"id\": \"9dfd6ff5-60a6-d609-8f72-50cec07261e9\", \"order\": 2, \"label\": \"Thread Pool & Connections\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard\"}, {\"id\": \"6632c321-6dab-2198-f8fe-27c3e8abc5da\", \"order\": 3, \"label\": \"JVM Memory & GC\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard\"}, {\"id\": \"82660977-7ef5-2f6d-e57c-f38685be84e1\", \"order\": 4, \"label\": \"Sessions & Applications\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard\"}, {\"id\": \"2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f\", \"order\": 5, \"label\": \"JVM & OS Resources\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard\"}]}}}, {\"panelIndex\": \"0563dba8-e018-01bf-7e3c-91932750954e\", \"gridData\": {\"x\": 0, \"y\": 2, \"w\": 16, \"h\": 12, \"i\": \"0563dba8-e018-01bf-7e3c-91932750954e\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## [Tomcat OTel] Request Processing\\n\\nThis dashboard provides detailed request processing pipeline metrics:\\n- Per-connector request rates and throughput\\n- Bytes sent and received over time\\n- Request latency and maximum processing time\\n- Per-servlet and per-web-module performance breakdown\\n\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"d00be7ec-c738-f775-8232-14b5aaa25458\", \"gridData\": {\"x\": 16, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"d00be7ec-c738-f775-8232-14b5aaa25458\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Total Requests\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"a3add44f-304e-8f9c-419d-12d64c0af768\", \"layerType\": \"data\", \"metricAccessor\": \"c8fc641c-15f5-7536-a782-5602a275c81e\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS total_requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"a3add44f-304e-8f9c-419d-12d64c0af768\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS total_requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\"}, \"columns\": [{\"fieldName\": \"total_requests\", \"columnId\": \"c8fc641c-15f5-7536-a782-5602a275c81e\", \"label\": \"Total Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"total_requests\", \"columnId\": \"c8fc641c-15f5-7536-a782-5602a275c81e\", \"label\": \"Total Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d21b6cd2-370e-1bbf-0c25-dce7eb336f49\", \"gridData\": {\"x\": 24, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"d21b6cd2-370e-1bbf-0c25-dce7eb336f49\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Total Errors\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"8f6e6bb0-6eaa-cb19-db9e-c47eeee29d94\", \"layerType\": \"data\", \"metricAccessor\": \"d1f6ea87-64f7-0f11-9e7a-6e764d938c58\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL\\n| STATS total_errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"8f6e6bb0-6eaa-cb19-db9e-c47eeee29d94\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL\\n| STATS total_errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount))\"}, \"columns\": [{\"fieldName\": \"total_errors\", \"columnId\": \"d1f6ea87-64f7-0f11-9e7a-6e764d938c58\", \"label\": \"Total Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"total_errors\", \"columnId\": \"d1f6ea87-64f7-0f11-9e7a-6e764d938c58\", \"label\": \"Total Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"0d83e7fe-9a2d-84e9-cc47-bebf25d54a09\", \"gridData\": {\"x\": 32, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"0d83e7fe-9a2d-84e9-cc47-bebf25d54a09\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Bytes Sent\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"2a843243-a171-10fb-01b2-11fbee13c73b\", \"layerType\": \"data\", \"metricAccessor\": \"68f9b3dd-f726-4452-8504-196818b5b667\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_bytesSent IS NOT NULL\\n| STATS total_sent = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesSent))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"2a843243-a171-10fb-01b2-11fbee13c73b\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_bytesSent IS NOT NULL\\n| STATS total_sent = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesSent))\"}, \"columns\": [{\"fieldName\": \"total_sent\", \"columnId\": \"68f9b3dd-f726-4452-8504-196818b5b667\", \"label\": \"Bytes Sent\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"total_sent\", \"columnId\": \"68f9b3dd-f726-4452-8504-196818b5b667\", \"label\": \"Bytes Sent\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"891a615e-311c-ea12-05ed-4c6d490df004\", \"gridData\": {\"x\": 40, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"891a615e-311c-ea12-05ed-4c6d490df004\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Bytes Received\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"bb69ddd5-d900-870a-d80e-103b1dbd144c\", \"layerType\": \"data\", \"metricAccessor\": \"ef695548-28ab-094b-9804-9881d807aa7e\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_bytesReceived IS NOT NULL\\n| STATS total_recv = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesReceived))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"bb69ddd5-d900-870a-d80e-103b1dbd144c\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_bytesReceived IS NOT NULL\\n| STATS total_recv = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_bytesReceived))\"}, \"columns\": [{\"fieldName\": \"total_recv\", \"columnId\": \"ef695548-28ab-094b-9804-9881d807aa7e\", \"label\": \"Bytes Received\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"total_recv\", \"columnId\": \"ef695548-28ab-094b-9804-9881d807aa7e\", \"label\": \"Bytes Received\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"3a24c211-28dc-9798-ac7e-148b6aab4fcf\", \"gridData\": {\"x\": 16, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"3a24c211-28dc-9798-ac7e-148b6aab4fcf\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Error Rate\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"33757f64-a90b-340b-f653-eacf1040e265\", \"layerType\": \"data\", \"metricAccessor\": \"f8c5c3ec-f2de-fb81-d912-5cc485aaa6c7\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount))\\n| EVAL error_rate = CASE(requests > 0, errors / requests, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"33757f64-a90b-340b-f653-eacf1040e265\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount)), errors = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_errorCount))\\n| EVAL error_rate = CASE(requests > 0, errors / requests, 0)\"}, \"columns\": [{\"fieldName\": \"error_rate\", \"columnId\": \"f8c5c3ec-f2de-fb81-d912-5cc485aaa6c7\", \"label\": \"Error Rate\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"error_rate\", \"columnId\": \"f8c5c3ec-f2de-fb81-d912-5cc485aaa6c7\", \"label\": \"Error Rate\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"99508fba-f7d4-a62f-1a4c-bc5b68e1b749\", \"gridData\": {\"x\": 24, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"99508fba-f7d4-a62f-1a4c-bc5b68e1b749\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Max Processing Time\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"3e9c5d2b-988c-c8f4-ec8c-b7169e6883ec\", \"layerType\": \"data\", \"metricAccessor\": \"43e127f4-de09-55dc-d2a3-cf44fc25bca5\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_maxTime IS NOT NULL\\n| STATS max_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"3e9c5d2b-988c-c8f4-ec8c-b7169e6883ec\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_maxTime IS NOT NULL\\n| STATS max_time = MAX(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime))\"}, \"columns\": [{\"fieldName\": \"max_time\", \"columnId\": \"43e127f4-de09-55dc-d2a3-cf44fc25bca5\", \"label\": \"Max Processing Time\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}], \"allColumns\": [{\"fieldName\": \"max_time\", \"columnId\": \"43e127f4-de09-55dc-d2a3-cf44fc25bca5\", \"label\": \"Max Processing Time\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"f49359cd-a921-d144-9b46-c3c9ceabc4fa\", \"gridData\": {\"x\": 32, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"f49359cd-a921-d144-9b46-c3c9ceabc4fa\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Avg Latency\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"43b93f7c-f8e7-1c51-a414-85966abbe531\", \"layerType\": \"data\", \"metricAccessor\": \"e1a612eb-21c4-d592-554e-f62840ac6b99\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL\\n| STATS proc_time = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), req_count = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\\n| EVAL avg_latency = CASE(req_count > 0, ROUND(proc_time / req_count, 1), 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"43b93f7c-f8e7-1c51-a414-85966abbe531\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL\\n| STATS proc_time = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_processingTime)), req_count = SUM(LAST_OVER_TIME(Catalina_GlobalRequestProcessor_requestCount))\\n| EVAL avg_latency = CASE(req_count > 0, ROUND(proc_time / req_count, 1), 0)\"}, \"columns\": [{\"fieldName\": \"avg_latency\", \"columnId\": \"e1a612eb-21c4-d592-554e-f62840ac6b99\", \"label\": \"Avg Latency\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \" ms\"}}}}], \"allColumns\": [{\"fieldName\": \"avg_latency\", \"columnId\": \"e1a612eb-21c4-d592-554e-f62840ac6b99\", \"label\": \"Avg Latency\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \" ms\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"4fee9153-2f23-5adc-16cc-45b447bdabb6\", \"gridData\": {\"x\": 40, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"4fee9153-2f23-5adc-16cc-45b447bdabb6\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Active Connectors\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"f73b5500-a552-bf13-9b90-e96cc1886d5d\", \"layerType\": \"data\", \"metricAccessor\": \"cbfecb4b-facd-5d0e-2d2d-a178f68d9d4b\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"FROM metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS active_connectors = COUNT_DISTINCT(attributes.name)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f73b5500-a552-bf13-9b90-e96cc1886d5d\": {\"query\": {\"esql\": \"FROM metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS active_connectors = COUNT_DISTINCT(attributes.name)\"}, \"columns\": [{\"fieldName\": \"active_connectors\", \"columnId\": \"cbfecb4b-facd-5d0e-2d2d-a178f68d9d4b\", \"label\": \"Active Connectors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"active_connectors\", \"columnId\": \"cbfecb4b-facd-5d0e-2d2d-a178f68d9d4b\", \"label\": \"Active Connectors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"fe67c09d-0e7a-cb15-ccca-75e2d35aba56\", \"gridData\": {\"x\": 0, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"fe67c09d-0e7a-cb15-ccca-75e2d35aba56\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Request Rate by Connector\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"e9800d59-f83c-7102-689e-1de6541fb15e\", \"accessors\": [\"334e83ad-3051-e9fa-28c0-e40866706860\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"e9800d59-f83c-7102-689e-1de6541fb15e\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS requests = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"requests\", \"columnId\": \"334e83ad-3051-e9fa-28c0-e40866706860\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"requests\", \"columnId\": \"334e83ad-3051-e9fa-28c0-e40866706860\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"c693173a-240d-64ed-7d4c-c5ce3fb22fdd\", \"gridData\": {\"x\": 24, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"c693173a-240d-64ed-7d4c-c5ce3fb22fdd\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Bytes Transferred Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"43bea42c-8e9a-164c-1cde-bae08841b697\", \"accessors\": [\"e5e5946c-03f6-0443-0fe1-053e9ebedf13\", \"f06ae7ae-0826-9c9b-6d57-196d06a19c93\"], \"layerType\": \"data\", \"seriesType\": \"area\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"area\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_bytesSent IS NOT NULL\\n| STATS bytes_sent = SUM(DELTA(Catalina_GlobalRequestProcessor_bytesSent)), bytes_recv = SUM(DELTA(Catalina_GlobalRequestProcessor_bytesReceived)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"43bea42c-8e9a-164c-1cde-bae08841b697\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_bytesSent IS NOT NULL\\n| STATS bytes_sent = SUM(DELTA(Catalina_GlobalRequestProcessor_bytesSent)), bytes_recv = SUM(DELTA(Catalina_GlobalRequestProcessor_bytesReceived)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"bytes_sent\", \"columnId\": \"e5e5946c-03f6-0443-0fe1-053e9ebedf13\", \"label\": \"Bytes Sent\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"bytes_recv\", \"columnId\": \"f06ae7ae-0826-9c9b-6d57-196d06a19c93\", \"label\": \"Bytes Received\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"bytes_sent\", \"columnId\": \"e5e5946c-03f6-0443-0fe1-053e9ebedf13\", \"label\": \"Bytes Sent\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"bytes_recv\", \"columnId\": \"f06ae7ae-0826-9c9b-6d57-196d06a19c93\", \"label\": \"Bytes Received\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"bytes\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"961afbf1-8023-e5ca-01ae-0173971bde66\", \"gridData\": {\"x\": 0, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"961afbf1-8023-e5ca-01ae-0173971bde66\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Average Latency Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"3162f3cd-00fd-c7ea-74b9-218bb3ac39bd\", \"accessors\": [\"a7d37f74-4fbe-df3d-608e-b8aecd44e606\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL\\n| STATS proc_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_processingTime)), req_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL avg_latency = CASE(req_delta > 0, ROUND(proc_delta / req_delta, 1), 0)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"3162f3cd-00fd-c7ea-74b9-218bb3ac39bd\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_processingTime IS NOT NULL\\n| STATS proc_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_processingTime)), req_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL avg_latency = CASE(req_delta > 0, ROUND(proc_delta / req_delta, 1), 0)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"avg_latency\", \"columnId\": \"a7d37f74-4fbe-df3d-608e-b8aecd44e606\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \" ms\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"avg_latency\", \"columnId\": \"a7d37f74-4fbe-df3d-608e-b8aecd44e606\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \" ms\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"bdb85b4f-125f-d019-fe68-0a9c03eb49ab\", \"gridData\": {\"x\": 24, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"bdb85b4f-125f-d019-fe68-0a9c03eb49ab\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Max Request Processing Time Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"50d64306-bb2a-a3d2-a064-ee664b650ba3\", \"accessors\": [\"8fa2bb00-13fe-c628-adac-a3f8c245bcc7\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_maxTime IS NOT NULL\\n| STATS max_time = MAX(MAX_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"50d64306-bb2a-a3d2-a064-ee664b650ba3\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_maxTime IS NOT NULL\\n| STATS max_time = MAX(MAX_OVER_TIME(Catalina_GlobalRequestProcessor_maxTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"max_time\", \"columnId\": \"8fa2bb00-13fe-c628-adac-a3f8c245bcc7\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"max_time\", \"columnId\": \"8fa2bb00-13fe-c628-adac-a3f8c245bcc7\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" ms\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"cbef192b-b084-4994-9bca-18cf842c2a6f\", \"gridData\": {\"x\": 0, \"y\": 47, \"w\": 24, \"h\": 12, \"i\": \"cbef192b-b084-4994-9bca-18cf842c2a6f\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Error Count Over Time by Connector\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"313ee559-1b17-0ec9-caf5-c3e97676b11a\", \"accessors\": [\"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL\\n| STATS errors = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"313ee559-1b17-0ec9-caf5-c3e97676b11a\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_errorCount IS NOT NULL\\n| STATS errors = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"errors\", \"columnId\": \"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"errors\", \"columnId\": \"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"6692c03a-b854-064d-eb0d-c2592bc786af\", \"gridData\": {\"x\": 24, \"y\": 47, \"w\": 24, \"h\": 12, \"i\": \"6692c03a-b854-064d-eb0d-c2592bc786af\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Error Rate % Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"a4d1b13a-79b3-f9d7-b93c-a3d1bf92d401\", \"accessors\": [\"f8c11630-a9d6-2b11-fd42-02416ac000c4\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS req_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)), err_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL error_pct = CASE(req_delta > 0, ROUND(err_delta / req_delta * 100, 2), 0)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"a4d1b13a-79b3-f9d7-b93c-a3d1bf92d401\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_GlobalRequestProcessor_requestCount IS NOT NULL\\n| STATS req_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_requestCount)), err_delta = SUM(DELTA(Catalina_GlobalRequestProcessor_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL error_pct = CASE(req_delta > 0, ROUND(err_delta / req_delta * 100, 2), 0)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"error_pct\", \"columnId\": \"f8c11630-a9d6-2b11-fd42-02416ac000c4\", \"label\": \"Error Rate %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"error_pct\", \"columnId\": \"f8c11630-a9d6-2b11-fd42-02416ac000c4\", \"label\": \"Error Rate %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"4f207131-ab46-bf82-36d6-82e78dc4e42b\", \"gridData\": {\"x\": 0, \"y\": 62, \"w\": 24, \"h\": 15, \"i\": \"4f207131-ab46-bf82-36d6-82e78dc4e42b\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Servlet Performance Summary\", \"visualizationType\": \"lnsDatatable\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"columns\": [{\"columnId\": \"df7572fa-cf5e-4535-aa2f-e45d4afcfeb6\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"ce15cc4a-884f-360a-4348-d6e27f39e2a8\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"isTransposed\": false, \"isMetric\": true}], \"layerId\": \"621515ca-ced2-2553-5815-8c13a469ddae\", \"layerType\": \"data\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_Servlet_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_Servlet_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_Servlet_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_Servlet_maxTime)), min_time = MAX(LAST_OVER_TIME(Catalina_Servlet_minTime)) BY attributes.name, attributes.WebModule\\n| EVAL min_time_display = CASE(min_time > 9.0E18, null, min_time)\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| SORT requests DESC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"621515ca-ced2-2553-5815-8c13a469ddae\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_Servlet_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_Servlet_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_Servlet_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_Servlet_maxTime)), min_time = MAX(LAST_OVER_TIME(Catalina_Servlet_minTime)) BY attributes.name, attributes.WebModule\\n| EVAL min_time_display = CASE(min_time > 9.0E18, null, min_time)\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| SORT requests DESC\"}, \"columns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"df7572fa-cf5e-4535-aa2f-e45d4afcfeb6\", \"label\": \"Servlet\", \"customLabel\": true}, {\"fieldName\": \"attributes.WebModule\", \"columnId\": \"ce15cc4a-884f-360a-4348-d6e27f39e2a8\", \"label\": \"Web Module\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"df7572fa-cf5e-4535-aa2f-e45d4afcfeb6\", \"label\": \"Servlet\", \"customLabel\": true}, {\"fieldName\": \"attributes.WebModule\", \"columnId\": \"ce15cc4a-884f-360a-4348-d6e27f39e2a8\", \"label\": \"Web Module\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"ca08c195-a618-46ba-e9b4-35f69fbc996d\", \"gridData\": {\"x\": 24, \"y\": 62, \"w\": 24, \"h\": 15, \"i\": \"ca08c195-a618-46ba-e9b4-35f69fbc996d\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Web Module Performance Summary\", \"visualizationType\": \"lnsDatatable\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"columns\": [{\"columnId\": \"775b0fb1-ac27-91a9-0878-d193f2d10b03\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"9362437d-076d-edb6-75e4-c2e38af72bf9\", \"isTransposed\": false, \"isMetric\": true}], \"layerId\": \"c23064e7-32f7-c8d2-f20d-289e73cb53d9\", \"layerType\": \"data\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebModule_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_WebModule_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_WebModule_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_WebModule_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_WebModule_maxTime)), startup_time = MAX(LAST_OVER_TIME(Catalina_WebModule_startupTime)) BY attributes.name\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| SORT requests DESC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"c23064e7-32f7-c8d2-f20d-289e73cb53d9\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_WebModule_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_WebModule_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_WebModule_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_WebModule_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_WebModule_maxTime)), startup_time = MAX(LAST_OVER_TIME(Catalina_WebModule_startupTime)) BY attributes.name\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| SORT requests DESC\"}, \"columns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"775b0fb1-ac27-91a9-0878-d193f2d10b03\", \"label\": \"Web Module\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"startup_time\", \"columnId\": \"9362437d-076d-edb6-75e4-c2e38af72bf9\", \"label\": \"Startup Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"775b0fb1-ac27-91a9-0878-d193f2d10b03\", \"label\": \"Web Module\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"04356b0f-84fd-d8c5-1296-45cae7b11133\", \"label\": \"Max Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"startup_time\", \"columnId\": \"9362437d-076d-edb6-75e4-c2e38af72bf9\", \"label\": \"Startup Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"9d8b039c-3620-4bd5-b39b-1479469a07f0\", \"gridData\": {\"x\": 0, \"y\": 59, \"w\": 48, \"h\": 3, \"i\": \"9d8b039c-3620-4bd5-b39b-1479469a07f0\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Servlet & Application Detail\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"7377dc74-69d6-4735-adc1-ddd7be2e7aeb\", \"gridData\": {\"x\": 0, \"y\": 29, \"w\": 48, \"h\": 3, \"i\": \"7377dc74-69d6-4735-adc1-ddd7be2e7aeb\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Request Latency\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"cddd56db-c41f-4f15-897d-f39c57b0d9a1\", \"gridData\": {\"x\": 0, \"y\": 14, \"w\": 48, \"h\": 3, \"i\": \"cddd56db-c41f-4f15-897d-f39c57b0d9a1\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Request Throughput\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"b69733d8-ae82-40fe-9c35-0240ad8c94a3\", \"gridData\": {\"x\": 0, \"y\": 44, \"w\": 48, \"h\": 3, \"i\": \"b69733d8-ae82-40fe-9c35-0240ad8c94a3\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Error Analysis\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}]", + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"meta\": {\"disabled\": false, \"negate\": false, \"alias\": null, \"type\": \"phrase\", \"key\": \"data_stream.dataset\", \"field\": \"data_stream.dataset\", \"params\": {\"query\": \"tomcat.otel\"}}, \"query\": {\"match_phrase\": {\"data_stream.dataset\": \"tomcat.otel\"}}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" + }, + "timeRestore": false, + "version": 1, + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"a18657f3-9386-7419-0c1e-db380f1b3b06\":{\"grow\":false,\"order\":0,\"width\":\"medium\",\"type\":\"optionsListControl\",\"explicitInput\":{\"id\":\"a18657f3-9386-7419-0c1e-db380f1b3b06\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"resource.attributes.host.name\",\"title\":\"Host\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}", + "showApplySelections": false + } + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-10-01T00:00:00Z", + "created_by": "admin", + "id": "apache_tomcat_otel-request-processing", + "managed": false, + "references": [ + { + "type": "dashboard", + "id": "apache_tomcat_otel-overview", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-request-processing", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-thread-pool-connections", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-memory-gc", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-sessions-servlets", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-os-resources", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard" + }, + { + "type": "index-pattern", + "id": "metrics-*", + "name": "controlGroup_a18657f3-9386-7419-0c1e-db380f1b3b06:optionsListDataView" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0", + "updated_at": "2023-10-01T00:00:00Z", + "updated_by": "admin", + "version": "1" +} diff --git a/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-sessions-servlets.json b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-sessions-servlets.json new file mode 100644 index 00000000000..8f4989e72c5 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-sessions-servlets.json @@ -0,0 +1,67 @@ +{ + "attributes": { + "title": "[Tomcat OTel] Sessions & Applications", + "description": "HTTP session lifecycle, per-application performance monitoring, servlet detail, and authentication failure tracking for Apache Tomcat web applications.", + "panelsJSON": "[{\"panelIndex\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\", \"gridData\": {\"x\": 0, \"y\": 0, \"w\": 48, \"h\": 2, \"i\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\"}, \"type\": \"links\", \"embeddableConfig\": {\"title\": \"Navigation\", \"enhancements\": {}, \"attributes\": {\"layout\": \"horizontal\", \"links\": [{\"id\": \"3af4ba12-6f83-488a-bdc9-0c7216a22d73\", \"order\": 0, \"label\": \"Overview\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard\"}, {\"id\": \"5909ede8-2eec-8644-b2c1-c28c00240a56\", \"order\": 1, \"label\": \"Request Processing\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard\"}, {\"id\": \"9dfd6ff5-60a6-d609-8f72-50cec07261e9\", \"order\": 2, \"label\": \"Thread Pool & Connections\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard\"}, {\"id\": \"6632c321-6dab-2198-f8fe-27c3e8abc5da\", \"order\": 3, \"label\": \"JVM Memory & GC\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard\"}, {\"id\": \"82660977-7ef5-2f6d-e57c-f38685be84e1\", \"order\": 4, \"label\": \"Sessions & Applications\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard\"}, {\"id\": \"2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f\", \"order\": 5, \"label\": \"JVM & OS Resources\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard\"}]}}}, {\"panelIndex\": \"0563dba8-e018-01bf-7e3c-91932750954e\", \"gridData\": {\"x\": 0, \"y\": 2, \"w\": 12, \"h\": 8, \"i\": \"0563dba8-e018-01bf-7e3c-91932750954e\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## [Tomcat OTel] Sessions & Applications\\n\\nThis dashboard monitors HTTP session lifecycle and per-application health:\\n- Active, created, expired, and rejected session counts\\n- Session creation and expiration rates\\n- Per-context session management details\\n- Servlet-level request processing and error breakdown\\n- Authentication failure tracking\\n\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"49301e58-88ef-ea95-fe31-b1a013f5ec28\", \"gridData\": {\"x\": 12, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"49301e58-88ef-ea95-fe31-b1a013f5ec28\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Active Sessions\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"f7855997-9e22-aaf0-2d3c-34ce11985f51\", \"layerType\": \"data\", \"metricAccessor\": \"12a6e96b-3907-f9b7-3867-47ce471ef61f\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active_sessions = SUM(LAST_OVER_TIME(Catalina_Manager_activeSessions))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f7855997-9e22-aaf0-2d3c-34ce11985f51\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active_sessions = SUM(LAST_OVER_TIME(Catalina_Manager_activeSessions))\"}, \"columns\": [{\"fieldName\": \"active_sessions\", \"columnId\": \"12a6e96b-3907-f9b7-3867-47ce471ef61f\", \"label\": \"Active Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"active_sessions\", \"columnId\": \"12a6e96b-3907-f9b7-3867-47ce471ef61f\", \"label\": \"Active Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"594f9782-5b46-3a11-227a-b88b84cc7c00\", \"gridData\": {\"x\": 21, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"594f9782-5b46-3a11-227a-b88b84cc7c00\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Total Created\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"c66fa715-47ca-60c6-a0f9-5682acf2083e\", \"layerType\": \"data\", \"metricAccessor\": \"d6793d44-1008-30bc-9986-7beadb3bbf71\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCounter IS NOT NULL\\n| STATS sessions_created = SUM(LAST_OVER_TIME(Catalina_Manager_sessionCounter))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"c66fa715-47ca-60c6-a0f9-5682acf2083e\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCounter IS NOT NULL\\n| STATS sessions_created = SUM(LAST_OVER_TIME(Catalina_Manager_sessionCounter))\"}, \"columns\": [{\"fieldName\": \"sessions_created\", \"columnId\": \"d6793d44-1008-30bc-9986-7beadb3bbf71\", \"label\": \"Total Created\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"sessions_created\", \"columnId\": \"d6793d44-1008-30bc-9986-7beadb3bbf71\", \"label\": \"Total Created\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"08a25cd1-3b5c-9dc3-32b7-b6eef533e68a\", \"gridData\": {\"x\": 30, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"08a25cd1-3b5c-9dc3-32b7-b6eef533e68a\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Expired Sessions\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"ead75d74-042c-bb3e-4c24-554e5c3900c1\", \"layerType\": \"data\", \"metricAccessor\": \"2a178ac5-bb05-7e70-004e-417786c4bc1c\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_expiredSessions IS NOT NULL\\n| STATS expired = SUM(LAST_OVER_TIME(Catalina_Manager_expiredSessions))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"ead75d74-042c-bb3e-4c24-554e5c3900c1\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_expiredSessions IS NOT NULL\\n| STATS expired = SUM(LAST_OVER_TIME(Catalina_Manager_expiredSessions))\"}, \"columns\": [{\"fieldName\": \"expired\", \"columnId\": \"2a178ac5-bb05-7e70-004e-417786c4bc1c\", \"label\": \"Expired Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"expired\", \"columnId\": \"2a178ac5-bb05-7e70-004e-417786c4bc1c\", \"label\": \"Expired Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"cf902a9f-e622-4d63-f91e-014ed97c0cee\", \"gridData\": {\"x\": 39, \"y\": 2, \"w\": 9, \"h\": 4, \"i\": \"cf902a9f-e622-4d63-f91e-014ed97c0cee\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Rejected Sessions\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"08d2a378-41cf-a125-51be-b1f1de656360\", \"layerType\": \"data\", \"metricAccessor\": \"3661675c-c3d8-98db-ddb2-a3105c94601a\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_rejectedSessions IS NOT NULL\\n| STATS rejected = SUM(LAST_OVER_TIME(Catalina_Manager_rejectedSessions))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"08d2a378-41cf-a125-51be-b1f1de656360\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_rejectedSessions IS NOT NULL\\n| STATS rejected = SUM(LAST_OVER_TIME(Catalina_Manager_rejectedSessions))\"}, \"columns\": [{\"fieldName\": \"rejected\", \"columnId\": \"3661675c-c3d8-98db-ddb2-a3105c94601a\", \"label\": \"Rejected Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"rejected\", \"columnId\": \"3661675c-c3d8-98db-ddb2-a3105c94601a\", \"label\": \"Rejected Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"7ad49faf-6eeb-0bb3-1ed5-1725b5fc8259\", \"gridData\": {\"x\": 12, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"7ad49faf-6eeb-0bb3-1ed5-1725b5fc8259\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Session Create Rate\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"7ff8f149-eb29-8199-6cb4-7673c2ee9f1b\", \"layerType\": \"data\", \"metricAccessor\": \"5455c27b-9539-ab3e-6267-6c59a5b89019\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCreateRate IS NOT NULL\\n| STATS create_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCreateRate))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"7ff8f149-eb29-8199-6cb4-7673c2ee9f1b\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCreateRate IS NOT NULL\\n| STATS create_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCreateRate))\"}, \"columns\": [{\"fieldName\": \"create_rate\", \"columnId\": \"5455c27b-9539-ab3e-6267-6c59a5b89019\", \"label\": \"Create Rate\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"/s\"}}}}], \"allColumns\": [{\"fieldName\": \"create_rate\", \"columnId\": \"5455c27b-9539-ab3e-6267-6c59a5b89019\", \"label\": \"Create Rate\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"/s\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"e9032ac3-4ed5-cf91-3d5d-e367c3dbedfa\", \"gridData\": {\"x\": 21, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"e9032ac3-4ed5-cf91-3d5d-e367c3dbedfa\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Avg Session Lifetime\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"10877fbb-7fe8-207f-28cb-7eb52f5f36af\", \"layerType\": \"data\", \"metricAccessor\": \"116841b3-d652-5271-b2d8-139a18a04118\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionAverageAliveTime IS NOT NULL\\n| STATS avg_lifetime = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"10877fbb-7fe8-207f-28cb-7eb52f5f36af\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionAverageAliveTime IS NOT NULL\\n| STATS avg_lifetime = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime))\"}, \"columns\": [{\"fieldName\": \"avg_lifetime\", \"columnId\": \"116841b3-d652-5271-b2d8-139a18a04118\", \"label\": \"Avg Lifetime\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}], \"allColumns\": [{\"fieldName\": \"avg_lifetime\", \"columnId\": \"116841b3-d652-5271-b2d8-139a18a04118\", \"label\": \"Avg Lifetime\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"6871124a-ccba-6afa-d949-a78e161c8526\", \"gridData\": {\"x\": 30, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"6871124a-ccba-6afa-d949-a78e161c8526\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Max Session Lifetime\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"1f033986-e77c-23c8-0855-90196f63bd89\", \"layerType\": \"data\", \"metricAccessor\": \"2a7f2647-a2ff-8a51-f58f-34eaeecacb53\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionMaxAliveTime IS NOT NULL\\n| STATS max_lifetime = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"1f033986-e77c-23c8-0855-90196f63bd89\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionMaxAliveTime IS NOT NULL\\n| STATS max_lifetime = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime))\"}, \"columns\": [{\"fieldName\": \"max_lifetime\", \"columnId\": \"2a7f2647-a2ff-8a51-f58f-34eaeecacb53\", \"label\": \"Max Lifetime\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}], \"allColumns\": [{\"fieldName\": \"max_lifetime\", \"columnId\": \"2a7f2647-a2ff-8a51-f58f-34eaeecacb53\", \"label\": \"Max Lifetime\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"bd7aba67-be6e-9317-f71d-46725413bca5\", \"gridData\": {\"x\": 39, \"y\": 6, \"w\": 9, \"h\": 4, \"i\": \"bd7aba67-be6e-9317-f71d-46725413bca5\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Peak Active Sessions\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"834b974e-19e6-e623-d75c-9b654080a2ca\", \"layerType\": \"data\", \"metricAccessor\": \"5c2ea356-533a-fc63-0335-a3c07eb8fcd1\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_maxActive IS NOT NULL\\n| STATS peak_active = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"834b974e-19e6-e623-d75c-9b654080a2ca\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_maxActive IS NOT NULL\\n| STATS peak_active = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive))\"}, \"columns\": [{\"fieldName\": \"peak_active\", \"columnId\": \"5c2ea356-533a-fc63-0335-a3c07eb8fcd1\", \"label\": \"Peak Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"peak_active\", \"columnId\": \"5c2ea356-533a-fc63-0335-a3c07eb8fcd1\", \"label\": \"Peak Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"6b9b4cb5-f14b-ea97-0e53-59a3e108e127\", \"gridData\": {\"x\": 0, \"y\": 13, \"w\": 24, \"h\": 12, \"i\": \"6b9b4cb5-f14b-ea97-0e53-59a3e108e127\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Active Sessions Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"d0d63c2b-e6af-fe1c-4124-f129af19a784\", \"accessors\": [\"bc52be08-53f0-9625-24b1-502011cc5e21\", \"188c13a6-4376-e3bf-44f7-213c19aebfc4\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active = MAX(LAST_OVER_TIME(Catalina_Manager_activeSessions)), peak = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"d0d63c2b-e6af-fe1c-4124-f129af19a784\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active = MAX(LAST_OVER_TIME(Catalina_Manager_activeSessions)), peak = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"active\", \"columnId\": \"bc52be08-53f0-9625-24b1-502011cc5e21\", \"label\": \"Active Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"peak\", \"columnId\": \"188c13a6-4376-e3bf-44f7-213c19aebfc4\", \"label\": \"Peak Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"active\", \"columnId\": \"bc52be08-53f0-9625-24b1-502011cc5e21\", \"label\": \"Active Sessions\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"peak\", \"columnId\": \"188c13a6-4376-e3bf-44f7-213c19aebfc4\", \"label\": \"Peak Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"c4729992-6009-bb0c-3e2a-69e766e5e457\", \"gridData\": {\"x\": 24, \"y\": 13, \"w\": 24, \"h\": 12, \"i\": \"c4729992-6009-bb0c-3e2a-69e766e5e457\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Session Create & Expire Rate Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"29b38f9d-1728-08dc-67c8-1290159f37af\", \"accessors\": [\"f0b94767-7c0c-9a15-3e3f-de63484aa6dd\", \"5d2d642f-1ab8-c4c3-23a9-5036b4fc559e\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCreateRate IS NOT NULL\\n| STATS create_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCreateRate)), expire_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionExpireRate)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"29b38f9d-1728-08dc-67c8-1290159f37af\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCreateRate IS NOT NULL\\n| STATS create_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCreateRate)), expire_rate = MAX(LAST_OVER_TIME(Catalina_Manager_sessionExpireRate)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"create_rate\", \"columnId\": \"f0b94767-7c0c-9a15-3e3f-de63484aa6dd\", \"label\": \"Create Rate (/s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"expire_rate\", \"columnId\": \"5d2d642f-1ab8-c4c3-23a9-5036b4fc559e\", \"label\": \"Expire Rate (/s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"create_rate\", \"columnId\": \"f0b94767-7c0c-9a15-3e3f-de63484aa6dd\", \"label\": \"Create Rate (/s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"expire_rate\", \"columnId\": \"5d2d642f-1ab8-c4c3-23a9-5036b4fc559e\", \"label\": \"Expire Rate (/s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"478824c5-fcc4-edbc-45de-d7fb03f8f9d1\", \"gridData\": {\"x\": 0, \"y\": 25, \"w\": 24, \"h\": 12, \"i\": \"478824c5-fcc4-edbc-45de-d7fb03f8f9d1\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Session Events Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"35c593e3-33c4-4f7f-478e-624c4f4ab69c\", \"accessors\": [\"31e29398-9bd4-9957-9591-099a86a8fdf0\", \"0bf4eff2-18cb-b587-97f1-5dde55922ca7\", \"75b8de42-4f7d-4499-42bb-98d4db981eb0\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [{\"rule\": {\"type\": \"matchExactly\", \"values\": [\"Rejected\"]}, \"color\": {\"type\": \"colorCode\", \"colorCode\": \"#cc5642\"}, \"touched\": false}], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCounter IS NOT NULL\\n| STATS created = SUM(DELTA(Catalina_Manager_sessionCounter)), expired = SUM(DELTA(Catalina_Manager_expiredSessions)), rejected = SUM(DELTA(Catalina_Manager_rejectedSessions)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"35c593e3-33c4-4f7f-478e-624c4f4ab69c\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionCounter IS NOT NULL\\n| STATS created = SUM(DELTA(Catalina_Manager_sessionCounter)), expired = SUM(DELTA(Catalina_Manager_expiredSessions)), rejected = SUM(DELTA(Catalina_Manager_rejectedSessions)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"created\", \"columnId\": \"31e29398-9bd4-9957-9591-099a86a8fdf0\", \"label\": \"Created\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"expired\", \"columnId\": \"0bf4eff2-18cb-b587-97f1-5dde55922ca7\", \"label\": \"Expired\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"rejected\", \"columnId\": \"75b8de42-4f7d-4499-42bb-98d4db981eb0\", \"label\": \"Rejected\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"created\", \"columnId\": \"31e29398-9bd4-9957-9591-099a86a8fdf0\", \"label\": \"Created\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"expired\", \"columnId\": \"0bf4eff2-18cb-b587-97f1-5dde55922ca7\", \"label\": \"Expired\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"rejected\", \"columnId\": \"75b8de42-4f7d-4499-42bb-98d4db981eb0\", \"label\": \"Rejected\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"e54b8313-795b-a9e9-1fe4-08e3ecb0987d\", \"gridData\": {\"x\": 24, \"y\": 25, \"w\": 24, \"h\": 12, \"i\": \"e54b8313-795b-a9e9-1fe4-08e3ecb0987d\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Avg Session Lifetime Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"b1feaa32-f97d-986c-46e7-62fd68588e8f\", \"accessors\": [\"7b48babc-db2e-2b71-525e-e9c4a021df2f\", \"5080a7e8-8d5d-95d8-b94e-341964e76d3b\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionAverageAliveTime IS NOT NULL\\n| STATS avg_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime)), max_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"b1feaa32-f97d-986c-46e7-62fd68588e8f\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_sessionAverageAliveTime IS NOT NULL\\n| STATS avg_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime)), max_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"avg_alive\", \"columnId\": \"7b48babc-db2e-2b71-525e-e9c4a021df2f\", \"label\": \"Avg Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}, {\"fieldName\": \"max_alive\", \"columnId\": \"5080a7e8-8d5d-95d8-b94e-341964e76d3b\", \"label\": \"Max Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"avg_alive\", \"columnId\": \"7b48babc-db2e-2b71-525e-e9c4a021df2f\", \"label\": \"Avg Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}, {\"fieldName\": \"max_alive\", \"columnId\": \"5080a7e8-8d5d-95d8-b94e-341964e76d3b\", \"label\": \"Max Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0, \"suffix\": \" s\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"fc4a5877-96d6-8cd1-4371-7216c327a05c\", \"gridData\": {\"x\": 0, \"y\": 40, \"w\": 48, \"h\": 13, \"i\": \"fc4a5877-96d6-8cd1-4371-7216c327a05c\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Application Session Summary\", \"visualizationType\": \"lnsDatatable\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"columns\": [{\"columnId\": \"1098ea7c-0088-126c-3c61-c5f1eba4d375\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"4596a761-cb74-7807-9e9d-e586ce623ec9\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"97c52260-69ff-a46b-b2f9-14aa35265398\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"2b4e1768-77eb-98a1-c20c-e902c128c03e\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"a3668a3e-9488-f80a-fd81-a95fdda058e2\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"1e2fb1a0-df5f-7c09-84d5-94049ae35ec1\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"5916828f-fc0d-0e1d-94a4-db9529abc7e5\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"9629575c-2bd8-9391-e348-ce2bba91d684\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"ea0ea6f9-66e5-45c4-00cd-4ab9e0dec8fd\", \"isTransposed\": false, \"isMetric\": true}], \"layerId\": \"7b50a51b-a07a-ac4e-ceac-c8b3eac13bed\", \"layerType\": \"data\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active = MAX(LAST_OVER_TIME(Catalina_Manager_activeSessions)), created = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCounter)), expired = MAX(LAST_OVER_TIME(Catalina_Manager_expiredSessions)), rejected = MAX(LAST_OVER_TIME(Catalina_Manager_rejectedSessions)), peak = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive)), avg_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime)), max_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime)) BY attributes.context, attributes.host\\n| SORT active DESC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"7b50a51b-a07a-ac4e-ceac-c8b3eac13bed\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Manager_activeSessions IS NOT NULL\\n| STATS active = MAX(LAST_OVER_TIME(Catalina_Manager_activeSessions)), created = MAX(LAST_OVER_TIME(Catalina_Manager_sessionCounter)), expired = MAX(LAST_OVER_TIME(Catalina_Manager_expiredSessions)), rejected = MAX(LAST_OVER_TIME(Catalina_Manager_rejectedSessions)), peak = MAX(LAST_OVER_TIME(Catalina_Manager_maxActive)), avg_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionAverageAliveTime)), max_alive = MAX(LAST_OVER_TIME(Catalina_Manager_sessionMaxAliveTime)) BY attributes.context, attributes.host\\n| SORT active DESC\"}, \"columns\": [{\"fieldName\": \"attributes.context\", \"columnId\": \"1098ea7c-0088-126c-3c61-c5f1eba4d375\", \"label\": \"Context\", \"customLabel\": true}, {\"fieldName\": \"attributes.host\", \"columnId\": \"4596a761-cb74-7807-9e9d-e586ce623ec9\", \"label\": \"Host\", \"customLabel\": true}, {\"fieldName\": \"active\", \"columnId\": \"97c52260-69ff-a46b-b2f9-14aa35265398\", \"label\": \"Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"created\", \"columnId\": \"2b4e1768-77eb-98a1-c20c-e902c128c03e\", \"label\": \"Created\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"expired\", \"columnId\": \"a3668a3e-9488-f80a-fd81-a95fdda058e2\", \"label\": \"Expired\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"rejected\", \"columnId\": \"1e2fb1a0-df5f-7c09-84d5-94049ae35ec1\", \"label\": \"Rejected\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"peak\", \"columnId\": \"5916828f-fc0d-0e1d-94a4-db9529abc7e5\", \"label\": \"Peak\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"avg_alive\", \"columnId\": \"9629575c-2bd8-9391-e348-ce2bba91d684\", \"label\": \"Avg Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_alive\", \"columnId\": \"ea0ea6f9-66e5-45c4-00cd-4ab9e0dec8fd\", \"label\": \"Max Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"attributes.context\", \"columnId\": \"1098ea7c-0088-126c-3c61-c5f1eba4d375\", \"label\": \"Context\", \"customLabel\": true}, {\"fieldName\": \"attributes.host\", \"columnId\": \"4596a761-cb74-7807-9e9d-e586ce623ec9\", \"label\": \"Host\", \"customLabel\": true}, {\"fieldName\": \"active\", \"columnId\": \"97c52260-69ff-a46b-b2f9-14aa35265398\", \"label\": \"Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"created\", \"columnId\": \"2b4e1768-77eb-98a1-c20c-e902c128c03e\", \"label\": \"Created\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"expired\", \"columnId\": \"a3668a3e-9488-f80a-fd81-a95fdda058e2\", \"label\": \"Expired\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"rejected\", \"columnId\": \"1e2fb1a0-df5f-7c09-84d5-94049ae35ec1\", \"label\": \"Rejected\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"peak\", \"columnId\": \"5916828f-fc0d-0e1d-94a4-db9529abc7e5\", \"label\": \"Peak\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"avg_alive\", \"columnId\": \"9629575c-2bd8-9391-e348-ce2bba91d684\", \"label\": \"Avg Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_alive\", \"columnId\": \"ea0ea6f9-66e5-45c4-00cd-4ab9e0dec8fd\", \"label\": \"Max Lifetime (s)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d6ca8728-3b56-2361-4efe-8ef0ce02a22b\", \"gridData\": {\"x\": 0, \"y\": 56, \"w\": 24, \"h\": 12, \"i\": \"d6ca8728-3b56-2361-4efe-8ef0ce02a22b\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Servlet Request Count Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"825754ae-00cd-6324-aea1-5079184cfa75\", \"accessors\": [\"334e83ad-3051-e9fa-28c0-e40866706860\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_requestCount IS NOT NULL\\n| STATS requests = SUM(DELTA(Catalina_Servlet_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"825754ae-00cd-6324-aea1-5079184cfa75\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_requestCount IS NOT NULL\\n| STATS requests = SUM(DELTA(Catalina_Servlet_requestCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"requests\", \"columnId\": \"334e83ad-3051-e9fa-28c0-e40866706860\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"requests\", \"columnId\": \"334e83ad-3051-e9fa-28c0-e40866706860\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"846c94d1-0e31-013a-8068-f33c48d0f6bc\", \"gridData\": {\"x\": 24, \"y\": 56, \"w\": 24, \"h\": 12, \"i\": \"846c94d1-0e31-013a-8068-f33c48d0f6bc\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Servlet Error Count Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"a313149f-0529-af00-e619-2e27e7ec38ec\", \"accessors\": [\"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_errorCount IS NOT NULL\\n| STATS errors = SUM(DELTA(Catalina_Servlet_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"a313149f-0529-af00-e619-2e27e7ec38ec\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_errorCount IS NOT NULL\\n| STATS errors = SUM(DELTA(Catalina_Servlet_errorCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"errors\", \"columnId\": \"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"errors\", \"columnId\": \"5d011fcc-43e7-5e4a-2d7c-b7c367f6b876\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"61e68480-f0b2-969d-cdbc-367a8ea03faa\", \"gridData\": {\"x\": 0, \"y\": 68, \"w\": 48, \"h\": 13, \"i\": \"61e68480-f0b2-969d-cdbc-367a8ea03faa\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Servlet Performance Detail\", \"visualizationType\": \"lnsDatatable\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"columns\": [{\"columnId\": \"df7572fa-cf5e-4535-aa2f-e45d4afcfeb6\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"ce15cc4a-884f-360a-4348-d6e27f39e2a8\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"43af451b-5ac7-2847-153a-ca0e28eab993\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"b0442ec3-f0c1-f453-786d-efa2802b2a2c\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"7d443d69-bbf3-f12d-e27c-67ab5a90a358\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"8b091953-ea6c-47a0-b297-8427177fed6a\", \"isTransposed\": false, \"isMetric\": true}], \"layerId\": \"fef0e892-a306-0ca8-0c83-5d6938294b9c\", \"layerType\": \"data\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_Servlet_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_Servlet_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_Servlet_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_Servlet_maxTime)), min_time = MAX(LAST_OVER_TIME(Catalina_Servlet_minTime)), load_time = MAX(LAST_OVER_TIME(Catalina_Servlet_loadTime)), allocated = MAX(LAST_OVER_TIME(Catalina_Servlet_countAllocated)) BY attributes.name, attributes.WebModule\\n| EVAL min_display = CASE(min_time > 9.0E18, null, min_time)\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| SORT requests DESC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"fef0e892-a306-0ca8-0c83-5d6938294b9c\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Servlet_requestCount IS NOT NULL\\n| STATS requests = MAX(LAST_OVER_TIME(Catalina_Servlet_requestCount)), errors = MAX(LAST_OVER_TIME(Catalina_Servlet_errorCount)), proc_time = MAX(LAST_OVER_TIME(Catalina_Servlet_processingTime)), max_time = MAX(LAST_OVER_TIME(Catalina_Servlet_maxTime)), min_time = MAX(LAST_OVER_TIME(Catalina_Servlet_minTime)), load_time = MAX(LAST_OVER_TIME(Catalina_Servlet_loadTime)), allocated = MAX(LAST_OVER_TIME(Catalina_Servlet_countAllocated)) BY attributes.name, attributes.WebModule\\n| EVAL min_display = CASE(min_time > 9.0E18, null, min_time)\\n| EVAL avg_latency = CASE(requests > 0, ROUND(proc_time / requests, 1), 0)\\n| EVAL error_pct = CASE(requests > 0, ROUND(errors / requests * 100, 2), 0)\\n| SORT requests DESC\"}, \"columns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"df7572fa-cf5e-4535-aa2f-e45d4afcfeb6\", \"label\": \"Servlet\", \"customLabel\": true}, {\"fieldName\": \"attributes.WebModule\", \"columnId\": \"ce15cc4a-884f-360a-4348-d6e27f39e2a8\", \"label\": \"Web Module\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"43af451b-5ac7-2847-153a-ca0e28eab993\", \"label\": \"Max (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"min_display\", \"columnId\": \"b0442ec3-f0c1-f453-786d-efa2802b2a2c\", \"label\": \"Min (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"load_time\", \"columnId\": \"7d443d69-bbf3-f12d-e27c-67ab5a90a358\", \"label\": \"Load Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"allocated\", \"columnId\": \"8b091953-ea6c-47a0-b297-8427177fed6a\", \"label\": \"Allocated\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"df7572fa-cf5e-4535-aa2f-e45d4afcfeb6\", \"label\": \"Servlet\", \"customLabel\": true}, {\"fieldName\": \"attributes.WebModule\", \"columnId\": \"ce15cc4a-884f-360a-4348-d6e27f39e2a8\", \"label\": \"Web Module\", \"customLabel\": true}, {\"fieldName\": \"requests\", \"columnId\": \"e7dc06ad-38a7-b936-25bf-0844497bbede\", \"label\": \"Requests\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"errors\", \"columnId\": \"932ebf11-3433-c972-c74a-138b5a393467\", \"label\": \"Errors\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"error_pct\", \"columnId\": \"024ce120-a1e7-9b6c-f386-a1b1fd3b31ef\", \"label\": \"Error %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"suffix\": \"%\"}}}}, {\"fieldName\": \"avg_latency\", \"columnId\": \"c43192c5-d305-9a83-56f4-c49ac3d869c8\", \"label\": \"Avg Latency (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1}}}}, {\"fieldName\": \"max_time\", \"columnId\": \"43af451b-5ac7-2847-153a-ca0e28eab993\", \"label\": \"Max (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"min_display\", \"columnId\": \"b0442ec3-f0c1-f453-786d-efa2802b2a2c\", \"label\": \"Min (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"load_time\", \"columnId\": \"7d443d69-bbf3-f12d-e27c-67ab5a90a358\", \"label\": \"Load Time (ms)\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"allocated\", \"columnId\": \"8b091953-ea6c-47a0-b297-8427177fed6a\", \"label\": \"Allocated\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"e1507d25-2301-44b2-a4af-3f60799446db\", \"gridData\": {\"x\": 0, \"y\": 84, \"w\": 24, \"h\": 6, \"i\": \"e1507d25-2301-44b2-a4af-3f60799446db\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Auth Failures\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"ecddf39b-15b2-4316-885b-38f25a124d1b\", \"layerType\": \"data\", \"metricAccessor\": \"78de33e9-e301-4afb-b2c7-82f99d4d4fa0\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Realm_failureCount IS NOT NULL\\n| STATS failures = SUM(LAST_OVER_TIME(Catalina_Realm_failureCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"ecddf39b-15b2-4316-885b-38f25a124d1b\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Realm_failureCount IS NOT NULL\\n| STATS failures = SUM(LAST_OVER_TIME(Catalina_Realm_failureCount))\"}, \"columns\": [{\"fieldName\": \"failures\", \"columnId\": \"78de33e9-e301-4afb-b2c7-82f99d4d4fa0\", \"label\": \"Auth Failures\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"failures\", \"columnId\": \"78de33e9-e301-4afb-b2c7-82f99d4d4fa0\", \"label\": \"Auth Failures\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"1f695937-1909-45e1-b3cb-8a18b35b1211\", \"gridData\": {\"x\": 24, \"y\": 84, \"w\": 24, \"h\": 12, \"i\": \"1f695937-1909-45e1-b3cb-8a18b35b1211\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Authentication Failures Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"c4cbc8c0-99ed-459f-8d83-06ea8317ca11\", \"accessors\": [\"6ad66d43-3614-42f5-9ab4-f366fad74e10\"], \"layerType\": \"data\", \"seriesType\": \"bar_stacked\", \"xAccessor\": \"8ce4597e-11da-43c9-ae3e-b0229f9b31ab\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"bar_stacked\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Realm_failureCount IS NOT NULL\\n| STATS failures = SUM(DELTA(Catalina_Realm_failureCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"c4cbc8c0-99ed-459f-8d83-06ea8317ca11\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Realm_failureCount IS NOT NULL\\n| STATS failures = SUM(DELTA(Catalina_Realm_failureCount)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"failures\", \"columnId\": \"6ad66d43-3614-42f5-9ab4-f366fad74e10\", \"label\": \"Auth Failures\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"8ce4597e-11da-43c9-ae3e-b0229f9b31ab\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"failures\", \"columnId\": \"6ad66d43-3614-42f5-9ab4-f366fad74e10\", \"label\": \"Auth Failures\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"8ce4597e-11da-43c9-ae3e-b0229f9b31ab\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"3105674c-2d38-428f-a451-447ca8782bfd\", \"gridData\": {\"x\": 0, \"y\": 90, \"w\": 24, \"h\": 6, \"i\": \"3105674c-2d38-428f-a451-447ca8782bfd\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Auth Failure Rate\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"317a47e0-2f5d-42bb-bf5f-c3813502ca96\", \"layerType\": \"data\", \"metricAccessor\": \"aff6b1fa-ef71-493c-a464-2e04e4e665f2\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Realm_failureCount IS NOT NULL\\n| STATS failure_rate = SUM(DELTA(Catalina_Realm_failureCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"317a47e0-2f5d-42bb-bf5f-c3813502ca96\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_Realm_failureCount IS NOT NULL\\n| STATS failure_rate = SUM(DELTA(Catalina_Realm_failureCount))\"}, \"columns\": [{\"fieldName\": \"failure_rate\", \"columnId\": \"aff6b1fa-ef71-493c-a464-2e04e4e665f2\", \"label\": \"New Failures\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"failure_rate\", \"columnId\": \"aff6b1fa-ef71-493c-a464-2e04e4e665f2\", \"label\": \"New Failures\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"a9b21e96-2d90-48d1-8e01-ae287e9f2a1d\", \"gridData\": {\"x\": 0, \"y\": 81, \"w\": 48, \"h\": 3, \"i\": \"a9b21e96-2d90-48d1-8e01-ae287e9f2a1d\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Authentication\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"4e281a52-c725-40a3-bf2a-3929979b50a3\", \"gridData\": {\"x\": 0, \"y\": 53, \"w\": 48, \"h\": 3, \"i\": \"4e281a52-c725-40a3-bf2a-3929979b50a3\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Servlet Performance\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"aa791998-e782-44af-b10c-1c5a05d3a7a3\", \"gridData\": {\"x\": 0, \"y\": 37, \"w\": 48, \"h\": 3, \"i\": \"aa791998-e782-44af-b10c-1c5a05d3a7a3\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Per-Application Detail\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"3afdff1c-692b-495e-a407-61cc42d687db\", \"gridData\": {\"x\": 0, \"y\": 10, \"w\": 48, \"h\": 3, \"i\": \"3afdff1c-692b-495e-a407-61cc42d687db\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Session Lifecycle\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}]", + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"meta\": {\"disabled\": false, \"negate\": false, \"alias\": null, \"type\": \"phrase\", \"key\": \"data_stream.dataset\", \"field\": \"data_stream.dataset\", \"params\": {\"query\": \"tomcat.otel\"}}, \"query\": {\"match_phrase\": {\"data_stream.dataset\": \"tomcat.otel\"}}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" + }, + "timeRestore": false, + "version": 1, + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"a18657f3-9386-7419-0c1e-db380f1b3b06\":{\"grow\":false,\"order\":0,\"width\":\"medium\",\"type\":\"optionsListControl\",\"explicitInput\":{\"id\":\"a18657f3-9386-7419-0c1e-db380f1b3b06\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"resource.attributes.host.name\",\"title\":\"Host\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}", + "showApplySelections": false + } + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-10-01T00:00:00Z", + "created_by": "admin", + "id": "apache_tomcat_otel-sessions-servlets", + "managed": false, + "references": [ + { + "type": "dashboard", + "id": "apache_tomcat_otel-overview", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-request-processing", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-thread-pool-connections", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-memory-gc", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-sessions-servlets", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-os-resources", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard" + }, + { + "type": "index-pattern", + "id": "metrics-*", + "name": "controlGroup_a18657f3-9386-7419-0c1e-db380f1b3b06:optionsListDataView" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0", + "updated_at": "2023-10-01T00:00:00Z", + "updated_by": "admin", + "version": "1" +} diff --git a/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-thread-pool-connections.json b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-thread-pool-connections.json new file mode 100644 index 00000000000..c385c94a086 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/dashboard/apache_tomcat_otel-thread-pool-connections.json @@ -0,0 +1,67 @@ +{ + "attributes": { + "title": "[Tomcat OTel] Thread Pool & Connections", + "description": "Thread pool saturation and connection management for Apache Tomcat connectors, including utilization ratios and capacity limits.", + "panelsJSON": "[{\"panelIndex\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\", \"gridData\": {\"x\": 0, \"y\": 0, \"w\": 48, \"h\": 2, \"i\": \"91144e9b-fac7-b44d-0b1d-8339201b83cb\"}, \"type\": \"links\", \"embeddableConfig\": {\"title\": \"Navigation\", \"enhancements\": {}, \"attributes\": {\"layout\": \"horizontal\", \"links\": [{\"id\": \"3af4ba12-6f83-488a-bdc9-0c7216a22d73\", \"order\": 0, \"label\": \"Overview\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard\"}, {\"id\": \"5909ede8-2eec-8644-b2c1-c28c00240a56\", \"order\": 1, \"label\": \"Request Processing\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard\"}, {\"id\": \"9dfd6ff5-60a6-d609-8f72-50cec07261e9\", \"order\": 2, \"label\": \"Thread Pool & Connections\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard\"}, {\"id\": \"6632c321-6dab-2198-f8fe-27c3e8abc5da\", \"order\": 3, \"label\": \"JVM Memory & GC\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard\"}, {\"id\": \"82660977-7ef5-2f6d-e57c-f38685be84e1\", \"order\": 4, \"label\": \"Sessions & Applications\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard\"}, {\"id\": \"2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f\", \"order\": 5, \"label\": \"JVM & OS Resources\", \"type\": \"dashboardLink\", \"destinationRefName\": \"link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard\"}]}}}, {\"panelIndex\": \"0563dba8-e018-01bf-7e3c-91932750954e\", \"gridData\": {\"x\": 0, \"y\": 2, \"w\": 16, \"h\": 12, \"i\": \"0563dba8-e018-01bf-7e3c-91932750954e\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## [Tomcat OTel] Thread Pool & Connections\\n\\nThis dashboard monitors thread pool saturation and connection management:\\n- Busy vs. idle thread counts per connector\\n- Thread pool utilization as a ratio of maxThreads\\n- Active connections and keep-alive connection counts\\n- Connection utilization as a ratio of maxConnections\\n\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"c6d72bc0-ae65-de19-45ad-b0db799870a4\", \"gridData\": {\"x\": 16, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"c6d72bc0-ae65-de19-45ad-b0db799870a4\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Busy Threads\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"d45fe8ac-9a3a-f135-d1d8-5d640ee18a79\", \"layerType\": \"data\", \"metricAccessor\": \"3cbbf0ad-cd73-6288-12a9-4ec9e0e297c3\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"d45fe8ac-9a3a-f135-d1d8-5d640ee18a79\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy))\"}, \"columns\": [{\"fieldName\": \"busy_threads\", \"columnId\": \"3cbbf0ad-cd73-6288-12a9-4ec9e0e297c3\", \"label\": \"Busy Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"busy_threads\", \"columnId\": \"3cbbf0ad-cd73-6288-12a9-4ec9e0e297c3\", \"label\": \"Busy Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"c501c1cd-74c3-2aec-c4f4-0672f4405745\", \"gridData\": {\"x\": 24, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"c501c1cd-74c3-2aec-c4f4-0672f4405745\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Total Threads\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"85bf3df5-e81d-b9c0-8375-608f72421178\", \"layerType\": \"data\", \"metricAccessor\": \"d2e9c2a4-d6b7-ac9d-e7b5-9636cb133039\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadCount IS NOT NULL\\n| STATS total_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"85bf3df5-e81d-b9c0-8375-608f72421178\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadCount IS NOT NULL\\n| STATS total_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount))\"}, \"columns\": [{\"fieldName\": \"total_threads\", \"columnId\": \"d2e9c2a4-d6b7-ac9d-e7b5-9636cb133039\", \"label\": \"Total Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"total_threads\", \"columnId\": \"d2e9c2a4-d6b7-ac9d-e7b5-9636cb133039\", \"label\": \"Total Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"c282b309-662a-694e-65aa-d49f1c0d3e5b\", \"gridData\": {\"x\": 32, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"c282b309-662a-694e-65aa-d49f1c0d3e5b\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Max Threads\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"cca0f63b-7dbc-2560-0055-e5b15bc9ca87\", \"layerType\": \"data\", \"metricAccessor\": \"87dd804f-1f34-85ef-4c14-4eed390ff18b\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_maxThreads IS NOT NULL\\n| STATS max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"cca0f63b-7dbc-2560-0055-e5b15bc9ca87\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_maxThreads IS NOT NULL\\n| STATS max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\"}, \"columns\": [{\"fieldName\": \"max_threads\", \"columnId\": \"87dd804f-1f34-85ef-4c14-4eed390ff18b\", \"label\": \"Max Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"max_threads\", \"columnId\": \"87dd804f-1f34-85ef-4c14-4eed390ff18b\", \"label\": \"Max Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"c3ff262f-6ed7-ee3e-eefd-4039730eaab7\", \"gridData\": {\"x\": 40, \"y\": 2, \"w\": 8, \"h\": 6, \"i\": \"c3ff262f-6ed7-ee3e-eefd-4039730eaab7\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Thread Utilization\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"d7247a85-b0b5-305d-a758-3f023fab171d\", \"layerType\": \"data\", \"metricAccessor\": \"1d0cacce-6cf5-4918-0c3d-782fdf75e45b\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, busy / max_threads, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"d7247a85-b0b5-305d-a758-3f023fab171d\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, busy / max_threads, 0)\"}, \"columns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"1d0cacce-6cf5-4918-0c3d-782fdf75e45b\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"1d0cacce-6cf5-4918-0c3d-782fdf75e45b\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"5fdb6293-8a1b-1c8f-cf27-c8f93591db05\", \"gridData\": {\"x\": 16, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"5fdb6293-8a1b-1c8f-cf27-c8f93591db05\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Active Connections\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"f16a49f1-b805-f42c-6a8f-008862b03ac6\", \"layerType\": \"data\", \"metricAccessor\": \"6e5104f2-a091-21fb-73e8-f9db07949a43\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS connections = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f16a49f1-b805-f42c-6a8f-008862b03ac6\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS connections = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount))\"}, \"columns\": [{\"fieldName\": \"connections\", \"columnId\": \"6e5104f2-a091-21fb-73e8-f9db07949a43\", \"label\": \"Active Connections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"connections\", \"columnId\": \"6e5104f2-a091-21fb-73e8-f9db07949a43\", \"label\": \"Active Connections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"77df583a-fab0-6096-18e9-a954da2195ef\", \"gridData\": {\"x\": 24, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"77df583a-fab0-6096-18e9-a954da2195ef\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Max Connections\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"4519fb32-13b3-410b-9274-d03b2de1892b\", \"layerType\": \"data\", \"metricAccessor\": \"d2875f42-1364-eaee-6325-21fbbf104102\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_maxConnections IS NOT NULL\\n| STATS max_connections = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"4519fb32-13b3-410b-9274-d03b2de1892b\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_maxConnections IS NOT NULL\\n| STATS max_connections = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\"}, \"columns\": [{\"fieldName\": \"max_connections\", \"columnId\": \"d2875f42-1364-eaee-6325-21fbbf104102\", \"label\": \"Max Connections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"allColumns\": [{\"fieldName\": \"max_connections\", \"columnId\": \"d2875f42-1364-eaee-6325-21fbbf104102\", \"label\": \"Max Connections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"40c5fb57-f6db-a3bc-cc89-5a3c26c9515c\", \"gridData\": {\"x\": 32, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"40c5fb57-f6db-a3bc-cc89-5a3c26c9515c\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Keep-Alive Connections\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"662dcc24-d4b6-69f2-df68-e81142a787ce\", \"layerType\": \"data\", \"metricAccessor\": \"93918707-56e5-cceb-616c-944a5cb273b7\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_keepAliveCount IS NOT NULL\\n| STATS keepalive = SUM(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount))\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"662dcc24-d4b6-69f2-df68-e81142a787ce\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_keepAliveCount IS NOT NULL\\n| STATS keepalive = SUM(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount))\"}, \"columns\": [{\"fieldName\": \"keepalive\", \"columnId\": \"93918707-56e5-cceb-616c-944a5cb273b7\", \"label\": \"Keep-Alive\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"allColumns\": [{\"fieldName\": \"keepalive\", \"columnId\": \"93918707-56e5-cceb-616c-944a5cb273b7\", \"label\": \"Keep-Alive\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d00f1df8-0bc0-1fa2-8b82-e604932ec567\", \"gridData\": {\"x\": 40, \"y\": 8, \"w\": 8, \"h\": 6, \"i\": \"d00f1df8-0bc0-1fa2-8b82-e604932ec567\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"attributes\": {\"title\": \"Connection Utilization\", \"visualizationType\": \"lnsMetric\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"25f8f582-7941-e1be-100f-5b62ff8b75cd\", \"layerType\": \"data\", \"metricAccessor\": \"3aba85be-0b7f-d2e0-ed52-5c433843af6b\", \"showBar\": false, \"applyColorTo\": \"background\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\\n| EVAL conn_util = CASE(max_conns > 0, conns / max_conns, 0)\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"25f8f582-7941-e1be-100f-5b62ff8b75cd\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\\n| EVAL conn_util = CASE(max_conns > 0, conns / max_conns, 0)\"}, \"columns\": [{\"fieldName\": \"conn_util\", \"columnId\": \"3aba85be-0b7f-d2e0-ed52-5c433843af6b\", \"label\": \"Connection Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"allColumns\": [{\"fieldName\": \"conn_util\", \"columnId\": \"3aba85be-0b7f-d2e0-ed52-5c433843af6b\", \"label\": \"Connection Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"percent\", \"params\": {\"decimals\": 1}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"cf711be4-c8c6-6408-42f3-76200ec86301\", \"gridData\": {\"x\": 0, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"cf711be4-c8c6-6408-42f3-76200ec86301\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Thread Counts Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"dc77e285-4195-9b3e-eec5-0683addd961a\", \"accessors\": [\"ad1ad131-4a52-edc8-e7b9-c7903001f248\", \"8487ad49-2918-c91d-f1d9-c1c87875c678\", \"cb295c7a-8e59-ad87-967d-8a7e319ff74b\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), total = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"dc77e285-4195-9b3e-eec5-0683addd961a\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), total = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"busy\", \"columnId\": \"ad1ad131-4a52-edc8-e7b9-c7903001f248\", \"label\": \"Busy\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"total\", \"columnId\": \"8487ad49-2918-c91d-f1d9-c1c87875c678\", \"label\": \"Current\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_threads\", \"columnId\": \"cb295c7a-8e59-ad87-967d-8a7e319ff74b\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"busy\", \"columnId\": \"ad1ad131-4a52-edc8-e7b9-c7903001f248\", \"label\": \"Busy\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"total\", \"columnId\": \"8487ad49-2918-c91d-f1d9-c1c87875c678\", \"label\": \"Current\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_threads\", \"columnId\": \"cb295c7a-8e59-ad87-967d-8a7e319ff74b\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"b1c8af0f-eb1a-def6-893b-649a7d2e4bc4\", \"gridData\": {\"x\": 24, \"y\": 17, \"w\": 24, \"h\": 12, \"i\": \"b1c8af0f-eb1a-def6-893b-649a7d2e4bc4\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Thread Pool Utilization % Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"8a0e3c22-725d-edbb-4426-29b11fc3bc69\", \"accessors\": [\"548acbf7-80df-d206-cf3f-28f3c99e9746\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL utilization = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"8a0e3c22-725d-edbb-4426-29b11fc3bc69\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL utilization = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"utilization\", \"columnId\": \"548acbf7-80df-d206-cf3f-28f3c99e9746\", \"label\": \"Utilization %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"utilization\", \"columnId\": \"548acbf7-80df-d206-cf3f-28f3c99e9746\", \"label\": \"Utilization %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"f909d72d-9d32-ed97-9b6b-794721624b83\", \"gridData\": {\"x\": 0, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"f909d72d-9d32-ed97-9b6b-794721624b83\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Connection Count Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"126074cc-3358-58be-875b-b9863889f25d\", \"accessors\": [\"3e53cc75-572f-801a-09fc-6544dbb1256a\", \"aa93b42c-1457-8c8d-08cc-69298cc75d05\", \"22137ebf-2a62-eb03-3787-184f1d7679eb\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), keepalive = MAX(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount)), max_connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"126074cc-3358-58be-875b-b9863889f25d\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), keepalive = MAX(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount)), max_connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"connections\", \"columnId\": \"3e53cc75-572f-801a-09fc-6544dbb1256a\", \"label\": \"Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"keepalive\", \"columnId\": \"aa93b42c-1457-8c8d-08cc-69298cc75d05\", \"label\": \"Keep-Alive\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_connections\", \"columnId\": \"22137ebf-2a62-eb03-3787-184f1d7679eb\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"allColumns\": [{\"fieldName\": \"connections\", \"columnId\": \"3e53cc75-572f-801a-09fc-6544dbb1256a\", \"label\": \"Active\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"keepalive\", \"columnId\": \"aa93b42c-1457-8c8d-08cc-69298cc75d05\", \"label\": \"Keep-Alive\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"max_connections\", \"columnId\": \"22137ebf-2a62-eb03-3787-184f1d7679eb\", \"label\": \"Max\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 0}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d9f426fa-8476-6df4-ee04-831e3ab93171\", \"gridData\": {\"x\": 24, \"y\": 32, \"w\": 24, \"h\": 12, \"i\": \"d9f426fa-8476-6df4-ee04-831e3ab93171\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Connection Utilization % Over Time\", \"visualizationType\": \"lnsXY\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layers\": [{\"layerId\": \"f86abdaa-bea0-6412-12e6-401071fcf9e1\", \"accessors\": [\"548acbf7-80df-d206-cf3f-28f3c99e9746\"], \"layerType\": \"data\", \"seriesType\": \"line\", \"xAccessor\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"position\": \"top\", \"showGridlines\": false, \"splitAccessor\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"colorMapping\": {\"assignments\": [], \"specialAssignments\": [{\"rule\": {\"type\": \"other\"}, \"color\": {\"type\": \"loop\"}, \"touched\": false}], \"paletteId\": \"eui_amsterdam_color_blind\", \"colorMode\": {\"type\": \"categorical\"}}}], \"preferredSeriesType\": \"line\", \"legend\": {\"isVisible\": true, \"position\": \"right\"}, \"valueLabels\": \"hide\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL utilization = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"f86abdaa-bea0-6412-12e6-401071fcf9e1\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)) BY time_bucket = BUCKET(@timestamp, 20, ?_tstart, ?_tend), attributes.name\\n| EVAL utilization = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0)\\n| SORT time_bucket ASC\"}, \"columns\": [{\"fieldName\": \"utilization\", \"columnId\": \"548acbf7-80df-d206-cf3f-28f3c99e9746\", \"label\": \"Utilization %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"allColumns\": [{\"fieldName\": \"utilization\", \"columnId\": \"548acbf7-80df-d206-cf3f-28f3c99e9746\", \"label\": \"Utilization %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"time_bucket\", \"columnId\": \"42a876a0-15e3-395a-0a00-b1577942ad2f\", \"label\": \"time_bucket\", \"customLabel\": false, \"meta\": {\"type\": \"date\", \"esType\": \"date\"}}, {\"fieldName\": \"attributes.name\", \"columnId\": \"abd1a85f-5c84-5baa-1363-00682803c1ae\", \"label\": \"attributes.name\", \"customLabel\": false}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"d3a34712-d617-b86d-d962-5c391592eba1\", \"gridData\": {\"x\": 0, \"y\": 47, \"w\": 24, \"h\": 10, \"i\": \"d3a34712-d617-b86d-d962-5c391592eba1\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Thread Pool Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"1ecb1349-6796-1d25-665e-7ff255e452c3\", \"layerType\": \"data\", \"metricAccessor\": \"dd5f32b9-7f5a-2698-a8b8-4275ffd5af68\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 60.0}, {\"color\": \"#d6bf57\", \"stop\": 80.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 60.0}, {\"color\": \"#cc5642\", \"stop\": 80.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"1ecb1349-6796-1d25-665e-7ff255e452c3\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_currentThreadsBusy IS NOT NULL\\n| STATS busy = SUM(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), max_threads = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads))\\n| EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"columns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"dd5f32b9-7f5a-2698-a8b8-4275ffd5af68\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"thread_util\", \"columnId\": \"dd5f32b9-7f5a-2698-a8b8-4275ffd5af68\", \"label\": \"Thread Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"566b97db-9231-aa36-1a92-d38dd8d526e2\", \"gridData\": {\"x\": 24, \"y\": 47, \"w\": 24, \"h\": 10, \"i\": \"566b97db-9231-aa36-1a92-d38dd8d526e2\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Connection Utilization\", \"visualizationType\": \"lnsGauge\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"layerId\": \"191e0c64-d9ea-9c47-0027-0d40eb2c0398\", \"layerType\": \"data\", \"metricAccessor\": \"b2d3edc8-ede7-bcbd-d565-d15acd0792de\", \"minAccessor\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"maxAccessor\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"goalAccessor\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"shape\": \"arc\", \"ticksPosition\": \"auto\", \"labelMajorMode\": \"auto\", \"colorMode\": \"palette\", \"palette\": {\"name\": \"custom\", \"type\": \"palette\", \"params\": {\"steps\": 3, \"name\": \"custom\", \"reverse\": false, \"rangeType\": \"number\", \"rangeMin\": 0.0, \"rangeMax\": 100.0, \"progression\": \"fixed\", \"stops\": [{\"color\": \"#54b399\", \"stop\": 50.0}, {\"color\": \"#d6bf57\", \"stop\": 80.0}, {\"color\": \"#cc5642\", \"stop\": 100.0}], \"colorStops\": [{\"color\": \"#54b399\", \"stop\": 0.0}, {\"color\": \"#d6bf57\", \"stop\": 50.0}, {\"color\": \"#cc5642\", \"stop\": 80.0}], \"continuity\": \"above\", \"maxSteps\": 3}}}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\\n| EVAL conn_util = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"191e0c64-d9ea-9c47-0027-0d40eb2c0398\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_connectionCount IS NOT NULL\\n| STATS conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = SUM(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections))\\n| EVAL conn_util = CASE(max_conns > 0, ROUND(conns / max_conns * 100, 1), 0)\\n| EVAL gauge_min = 0\\n| EVAL gauge_max = 100\\n| EVAL gauge_goal = 80\"}, \"columns\": [{\"fieldName\": \"conn_util\", \"columnId\": \"b2d3edc8-ede7-bcbd-d565-d15acd0792de\", \"label\": \"Connection Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"allColumns\": [{\"fieldName\": \"conn_util\", \"columnId\": \"b2d3edc8-ede7-bcbd-d565-d15acd0792de\", \"label\": \"Connection Utilization\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"gauge_min\", \"columnId\": \"94c8b873-aebf-1c7b-bef9-5da61f7d990e\", \"label\": \"gauge_min\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_max\", \"columnId\": \"5ab04406-6615-1dfd-11b5-f485d68ae5ee\", \"label\": \"gauge_max\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}, {\"fieldName\": \"gauge_goal\", \"columnId\": \"a7813011-1876-53f4-1cfa-9302ca95d0f1\", \"label\": \"gauge_goal\", \"customLabel\": false, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"7f3dbe25-3d65-846e-a4e5-b112f96f98bf\", \"gridData\": {\"x\": 0, \"y\": 60, \"w\": 48, \"h\": 15, \"i\": \"7f3dbe25-3d65-846e-a4e5-b112f96f98bf\"}, \"type\": \"lens\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"attributes\": {\"title\": \"Thread Pool Configuration Summary\", \"visualizationType\": \"lnsDatatable\", \"type\": \"lens\", \"references\": [], \"state\": {\"visualization\": {\"columns\": [{\"columnId\": \"64482e4a-0d16-5a48-bd10-37fb6fc673d3\", \"isTransposed\": false, \"isMetric\": false}, {\"columnId\": \"d79943bf-c66c-79c9-c854-7c3f3d9026ac\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"2831a562-c384-15cd-f58c-bd695e10dcba\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"cfc9711d-bf4e-bf6b-1d61-9eecae6d6c94\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"dbd1ce90-6f74-a94a-3292-a75ed360430f\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"7675e570-83ad-5718-a2dd-3c38e3aa44a8\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"b654276a-3b78-999c-2ba1-bc5759514fc6\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"3c2278f7-f6ff-46bf-545e-d8ea488b1a1c\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"63bbe2bc-0bdf-27d3-01a0-384308e4f0a5\", \"isTransposed\": false, \"isMetric\": true}, {\"columnId\": \"511cdcd3-2852-a39a-1e76-85cf409e54eb\", \"isTransposed\": false, \"isMetric\": true}], \"layerId\": \"b5ab9d59-1727-8d6e-bb70-6abac8cf7304\", \"layerType\": \"data\"}, \"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_maxThreads IS NOT NULL\\n| STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), current = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)), min_spare = MAX(LAST_OVER_TIME(Catalina_ThreadPool_minSpareThreads)), connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)), keepalive = MAX(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount)), accept_count = MAX(LAST_OVER_TIME(Catalina_ThreadPool_acceptCount)) BY attributes.name\\n| EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| EVAL conn_util = CASE(max_conns > 0, ROUND(connections / max_conns * 100, 1), 0)\\n| SORT attributes.name ASC\"}, \"filters\": [], \"datasourceStates\": {\"textBased\": {\"layers\": {\"b5ab9d59-1727-8d6e-bb70-6abac8cf7304\": {\"query\": {\"esql\": \"TS metrics-tomcat.otel-*\\n| WHERE Catalina_ThreadPool_maxThreads IS NOT NULL\\n| STATS busy = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadsBusy)), current = MAX(LAST_OVER_TIME(Catalina_ThreadPool_currentThreadCount)), max_threads = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxThreads)), min_spare = MAX(LAST_OVER_TIME(Catalina_ThreadPool_minSpareThreads)), connections = MAX(LAST_OVER_TIME(Catalina_ThreadPool_connectionCount)), max_conns = MAX(LAST_OVER_TIME(Catalina_ThreadPool_maxConnections)), keepalive = MAX(LAST_OVER_TIME(Catalina_ThreadPool_keepAliveCount)), accept_count = MAX(LAST_OVER_TIME(Catalina_ThreadPool_acceptCount)) BY attributes.name\\n| EVAL thread_util = CASE(max_threads > 0, ROUND(busy / max_threads * 100, 1), 0)\\n| EVAL conn_util = CASE(max_conns > 0, ROUND(connections / max_conns * 100, 1), 0)\\n| SORT attributes.name ASC\"}, \"columns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"64482e4a-0d16-5a48-bd10-37fb6fc673d3\", \"label\": \"Connector\", \"customLabel\": true}, {\"fieldName\": \"busy\", \"columnId\": \"d79943bf-c66c-79c9-c854-7c3f3d9026ac\", \"label\": \"Busy\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"current\", \"columnId\": \"2831a562-c384-15cd-f58c-bd695e10dcba\", \"label\": \"Current\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"max_threads\", \"columnId\": \"cfc9711d-bf4e-bf6b-1d61-9eecae6d6c94\", \"label\": \"Max Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"thread_util\", \"columnId\": \"dbd1ce90-6f74-a94a-3292-a75ed360430f\", \"label\": \"Thread Util %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"connections\", \"columnId\": \"7675e570-83ad-5718-a2dd-3c38e3aa44a8\", \"label\": \"Connections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"max_conns\", \"columnId\": \"b654276a-3b78-999c-2ba1-bc5759514fc6\", \"label\": \"Max Conns\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}, {\"fieldName\": \"conn_util\", \"columnId\": \"3c2278f7-f6ff-46bf-545e-d8ea488b1a1c\", \"label\": \"Conn Util %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"keepalive\", \"columnId\": \"63bbe2bc-0bdf-27d3-01a0-384308e4f0a5\", \"label\": \"Keep-Alive\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"accept_count\", \"columnId\": \"511cdcd3-2852-a39a-1e76-85cf409e54eb\", \"label\": \"Accept Queue\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"allColumns\": [{\"fieldName\": \"attributes.name\", \"columnId\": \"64482e4a-0d16-5a48-bd10-37fb6fc673d3\", \"label\": \"Connector\", \"customLabel\": true}, {\"fieldName\": \"busy\", \"columnId\": \"d79943bf-c66c-79c9-c854-7c3f3d9026ac\", \"label\": \"Busy\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"current\", \"columnId\": \"2831a562-c384-15cd-f58c-bd695e10dcba\", \"label\": \"Current\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"max_threads\", \"columnId\": \"cfc9711d-bf4e-bf6b-1d61-9eecae6d6c94\", \"label\": \"Max Threads\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"thread_util\", \"columnId\": \"dbd1ce90-6f74-a94a-3292-a75ed360430f\", \"label\": \"Thread Util %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"connections\", \"columnId\": \"7675e570-83ad-5718-a2dd-3c38e3aa44a8\", \"label\": \"Connections\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"max_conns\", \"columnId\": \"b654276a-3b78-999c-2ba1-bc5759514fc6\", \"label\": \"Max Conns\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2, \"compact\": true}}}}, {\"fieldName\": \"conn_util\", \"columnId\": \"3c2278f7-f6ff-46bf-545e-d8ea488b1a1c\", \"label\": \"Conn Util %\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 1, \"suffix\": \"%\"}}}}, {\"fieldName\": \"keepalive\", \"columnId\": \"63bbe2bc-0bdf-27d3-01a0-384308e4f0a5\", \"label\": \"Keep-Alive\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}, {\"fieldName\": \"accept_count\", \"columnId\": \"511cdcd3-2852-a39a-1e76-85cf409e54eb\", \"label\": \"Accept Queue\", \"customLabel\": true, \"meta\": {\"type\": \"number\", \"esType\": \"long\"}, \"inMetricDimension\": true, \"params\": {\"format\": {\"id\": \"number\", \"params\": {\"decimals\": 2}}}}], \"timeField\": \"@timestamp\"}}}}, \"internalReferences\": [], \"adHocDataViews\": {}}}, \"syncTooltips\": false, \"syncColors\": false, \"syncCursor\": true, \"filters\": [], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}}, {\"panelIndex\": \"35f84cbc-c9d0-4b96-8aa6-123a5ebfbd86\", \"gridData\": {\"x\": 0, \"y\": 57, \"w\": 48, \"h\": 3, \"i\": \"35f84cbc-c9d0-4b96-8aa6-123a5ebfbd86\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Thread Pool Configuration\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"93221d06-99a8-4f25-a448-072c0a3ba254\", \"gridData\": {\"x\": 0, \"y\": 44, \"w\": 48, \"h\": 3, \"i\": \"93221d06-99a8-4f25-a448-072c0a3ba254\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Current Utilization\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"3977112e-508b-4ecf-b3b0-06d54559e7b3\", \"gridData\": {\"x\": 0, \"y\": 29, \"w\": 48, \"h\": 3, \"i\": \"3977112e-508b-4ecf-b3b0-06d54559e7b3\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Connections\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}, {\"panelIndex\": \"f2cdf4a3-f1f1-4cc0-abb4-c9ae114851fd\", \"gridData\": {\"x\": 0, \"y\": 14, \"w\": 48, \"h\": 3, \"i\": \"f2cdf4a3-f1f1-4cc0-abb4-c9ae114851fd\"}, \"type\": \"visualization\", \"embeddableConfig\": {\"enhancements\": {\"dynamicActions\": {\"events\": []}}, \"hidePanelTitles\": true, \"savedVis\": {\"type\": \"markdown\", \"id\": \"\", \"title\": \"\", \"description\": \"\", \"params\": {\"fontSize\": 12, \"openLinksInNewTab\": false, \"markdown\": \"## Thread Pool\"}, \"uiState\": {}, \"data\": {\"aggs\": [], \"searchSource\": {\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}}}}}]", + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\": [{\"$state\": {\"store\": \"appState\"}, \"meta\": {\"disabled\": false, \"negate\": false, \"alias\": null, \"type\": \"phrase\", \"key\": \"data_stream.dataset\", \"field\": \"data_stream.dataset\", \"params\": {\"query\": \"tomcat.otel\"}}, \"query\": {\"match_phrase\": {\"data_stream.dataset\": \"tomcat.otel\"}}}], \"query\": {\"query\": \"\", \"language\": \"kuery\"}}" + }, + "timeRestore": false, + "version": 1, + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"a18657f3-9386-7419-0c1e-db380f1b3b06\":{\"grow\":false,\"order\":0,\"width\":\"medium\",\"type\":\"optionsListControl\",\"explicitInput\":{\"id\":\"a18657f3-9386-7419-0c1e-db380f1b3b06\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"resource.attributes.host.name\",\"title\":\"Host\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}", + "showApplySelections": false + } + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-10-01T00:00:00Z", + "created_by": "admin", + "id": "apache_tomcat_otel-thread-pool-connections", + "managed": false, + "references": [ + { + "type": "dashboard", + "id": "apache_tomcat_otel-overview", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_3af4ba12-6f83-488a-bdc9-0c7216a22d73_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-request-processing", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_5909ede8-2eec-8644-b2c1-c28c00240a56_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-thread-pool-connections", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_9dfd6ff5-60a6-d609-8f72-50cec07261e9_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-memory-gc", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_6632c321-6dab-2198-f8fe-27c3e8abc5da_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-sessions-servlets", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_82660977-7ef5-2f6d-e57c-f38685be84e1_dashboard" + }, + { + "type": "dashboard", + "id": "apache_tomcat_otel-jvm-os-resources", + "name": "91144e9b-fac7-b44d-0b1d-8339201b83cb:link_2d7fbb7d-cfa4-5417-4c1b-cbcecf53130f_dashboard" + }, + { + "type": "index-pattern", + "id": "metrics-*", + "name": "controlGroup_a18657f3-9386-7419-0c1e-db380f1b3b06:optionsListDataView" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0", + "updated_at": "2023-10-01T00:00:00Z", + "updated_by": "admin", + "version": "1" +} diff --git a/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-avg-request-latency-99.5-Rolling30Days.json b/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-avg-request-latency-99.5-Rolling30Days.json new file mode 100644 index 00000000000..f6c80922d96 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-avg-request-latency-99.5-Rolling30Days.json @@ -0,0 +1,68 @@ +{ + "attributes": { + "name": "[Tomcat OTel] Average request latency 99.5% rolling 30 days", + "description": "Tracks the average per-request processing time of Apache Tomcat connectors, ensuring that 99.5% of 1-minute time intervals show average latency below 500 milliseconds over a rolling 30-day period. Breach indicates sustained slow request processing impacting user response times.", + "indicator": { + "type": "sli.metric.timeslice", + "params": { + "index": "metrics-*", + "filter": "data_stream.dataset: \"tomcat.otel\"", + "metric": { + "metrics": [ + { + "name": "A", + "aggregation": "max", + "field": "Catalina_GlobalRequestProcessor_processingTime" + }, + { + "name": "B", + "aggregation": "min", + "field": "Catalina_GlobalRequestProcessor_processingTime" + }, + { + "name": "C", + "aggregation": "max", + "field": "Catalina_GlobalRequestProcessor_requestCount" + }, + { + "name": "D", + "aggregation": "min", + "field": "Catalina_GlobalRequestProcessor_requestCount" + } + ], + "equation": "(A-B)/(C-D)", + "comparator": "LT", + "threshold": 500 + }, + "timestampField": "@timestamp" + } + }, + "budgetingMethod": "timeslices", + "timeWindow": { + "duration": "30d", + "type": "rolling" + }, + "objective": { + "target": 0.995, + "timesliceTarget": 0.95, + "timesliceWindow": "1m" + }, + "tags": [ + "tomcat", + "otel" + ], + "groupBy": "resource.attributes.service.instance.id" + }, + "id": "apache_tomcat_otel-avg-request-latency-99.5-Rolling30Days", + "type": "slo_template", + "artifacts": { + "dashboards": [ + { + "id": "apache_tomcat_otel-request-processing" + }, + { + "id": "apache_tomcat_otel-overview" + } + ] + } +} diff --git a/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-request-error-rate-99.5-Rolling30Days.json b/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-request-error-rate-99.5-Rolling30Days.json new file mode 100644 index 00000000000..be8ecd2e61f --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-request-error-rate-99.5-Rolling30Days.json @@ -0,0 +1,68 @@ +{ + "attributes": { + "name": "[Tomcat OTel] Request error rate 99.5% rolling 30 days", + "description": "Tracks the ratio of HTTP errors to total requests processed by Tomcat connectors, ensuring that 99.5% of 1-minute time intervals show an error rate below 5% over a rolling 30-day period. Breach indicates sustained elevated error responses impacting user experience.", + "indicator": { + "type": "sli.metric.timeslice", + "params": { + "index": "metrics-*", + "filter": "data_stream.dataset: \"tomcat.otel\"", + "metric": { + "metrics": [ + { + "name": "A", + "aggregation": "max", + "field": "Catalina_GlobalRequestProcessor_errorCount" + }, + { + "name": "B", + "aggregation": "min", + "field": "Catalina_GlobalRequestProcessor_errorCount" + }, + { + "name": "C", + "aggregation": "max", + "field": "Catalina_GlobalRequestProcessor_requestCount" + }, + { + "name": "D", + "aggregation": "min", + "field": "Catalina_GlobalRequestProcessor_requestCount" + } + ], + "equation": "(A-B)/(C-D)", + "comparator": "LT", + "threshold": 0.05 + }, + "timestampField": "@timestamp" + } + }, + "budgetingMethod": "timeslices", + "timeWindow": { + "duration": "30d", + "type": "rolling" + }, + "objective": { + "target": 0.995, + "timesliceTarget": 0.95, + "timesliceWindow": "1m" + }, + "tags": [ + "tomcat", + "otel" + ], + "groupBy": "resource.attributes.service.instance.id" + }, + "id": "apache_tomcat_otel-request-error-rate-99.5-Rolling30Days", + "type": "slo_template", + "artifacts": { + "dashboards": [ + { + "id": "apache_tomcat_otel-request-processing" + }, + { + "id": "apache_tomcat_otel-overview" + } + ] + } +} diff --git a/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-thread-pool-utilization-99.5-Rolling30Days.json b/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-thread-pool-utilization-99.5-Rolling30Days.json new file mode 100644 index 00000000000..ee3833cf951 --- /dev/null +++ b/packages/apache_tomcat_otel/kibana/slo_template/apache_tomcat_otel-thread-pool-utilization-99.5-Rolling30Days.json @@ -0,0 +1,58 @@ +{ + "attributes": { + "name": "[Tomcat OTel] Thread pool utilization 99.5% rolling 30 days", + "description": "Tracks the ratio of busy threads to maximum threads in Tomcat connector thread pools, ensuring that 99.5% of 1-minute time intervals show thread pool utilization below 80% over a rolling 30-day period. Breach indicates sustained thread pool saturation risking request queuing and connection refusal.", + "indicator": { + "type": "sli.metric.timeslice", + "params": { + "index": "metrics-*", + "filter": "data_stream.dataset: \"tomcat.otel\"", + "metric": { + "metrics": [ + { + "name": "A", + "aggregation": "avg", + "field": "Catalina_ThreadPool_currentThreadsBusy" + }, + { + "name": "B", + "aggregation": "avg", + "field": "Catalina_ThreadPool_maxThreads" + } + ], + "equation": "A/B", + "comparator": "LT", + "threshold": 0.8 + }, + "timestampField": "@timestamp" + } + }, + "budgetingMethod": "timeslices", + "timeWindow": { + "duration": "30d", + "type": "rolling" + }, + "objective": { + "target": 0.995, + "timesliceTarget": 0.95, + "timesliceWindow": "1m" + }, + "tags": [ + "tomcat", + "otel" + ], + "groupBy": "resource.attributes.service.instance.id" + }, + "id": "apache_tomcat_otel-thread-pool-utilization-99.5-Rolling30Days", + "type": "slo_template", + "artifacts": { + "dashboards": [ + { + "id": "apache_tomcat_otel-thread-pool-connections" + }, + { + "id": "apache_tomcat_otel-overview" + } + ] + } +} diff --git a/packages/apache_tomcat_otel/manifest.yml b/packages/apache_tomcat_otel/manifest.yml new file mode 100644 index 00000000000..4e9b6092258 --- /dev/null +++ b/packages/apache_tomcat_otel/manifest.yml @@ -0,0 +1,53 @@ +format_version: 3.5.7 +name: apache_tomcat_otel +title: "Apache Tomcat OpenTelemetry Assets" +version: 0.1.0 +source: + license: "Elastic-2.0" +description: "Apache Tomcat Assets from OpenTelemetry Collector" +type: content +categories: + - observability + - web + - application_observability +conditions: + kibana: + version: "^9.2.1" + elastic: + subscription: "basic" +discovery: + datasets: + - name: tomcat.otel +screenshots: + - src: /img/apache_tomcat_overview.png + title: Apache Tomcat metrics overview + size: 2122x4318 + type: image/png + - src: /img/apache_tomcat_jvm_os_resources.png + title: Apache Tomcat JVM & OS Resources + size: 2122x3994 + type: image/png + - src: /img/apache_tomcat_jvm_memory_gc.png + title: Apache Tomcat JVM Memory & GC + size: 2122x4386 + type: image/png + - src: /img/apache_tomcat_request_processing.png + title: Apache Tomcat Request Processing + size: 2122x4834 + type: image/png + - src: /img/apache_tomcat_sessions_applications.png + title: Apache Tomcat Sessions & Applications + size: 2122x4386 + type: image/png + - src: /img/apache_tomcat_thread_pool_connections.png + title: Apache Tomcat Thread Pool & Connections + size: 2122x4386 + type: image/png +icons: + - src: /img/apache_tomcat_otel_logo.svg + title: Apache Tomcat OTel + size: 32x32 + type: image/svg+xml +owner: + github: elastic/obs-infraobs-integrations + type: elastic