Webhook Stats

Platform Notice: Data Center Only - This article only applies to Atlassian apps on the Data Center platform.

Note that this KB was created for the Data Center version of the product. Data Center KBs for non-Data-Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Summary

WEBHOOK JIRA-STATS since Jira 10.3.18

Intro

Webhook Stats is statistic group which inherit Jira-Stats behaviour and structure. Refer to How to Use Jira Stats Logs for Server Monitoring and Troubleshooting for details. It provides two logs in Jira log file (atlassian-jira.log, prior to Jira 10.4.0) or Jira Stats log file (atlassian-jira-stats.log, since Jira 10.4.0): snapshot measuring activity over a 5-minute period (default value, can be changed) of time and total - measuring from Jira instance on a node start.

Solution

Logged statistics

Per-node logs statistics that describe webhook activity and queue utilisation. There are two types of statistics: Snapshot and Total. More detailed information can be found here: Jira stats logs.

Example log entry

Each stats starts with meta-data about stats itself - name, type (total/snapshot), timestamp and etc...

Webhook Stats example:

{ "_statsName": "WEBHOOKS-STATS", "_statsType": "snapshot", "_time": "2026-01-22T15:07:36.204Z", "_timestamp": 1769094456204, "_duration": "PT5M2.647S", "_invocations": 24, "_statsOverhead": "n/a", "totalStats": { "publishedRequestsCount": 12, "successCount": 1, "rejectedCount": 3, "failedCount": 1, "errorCount": 2, "filteredOutCount": 4, "processingTimeDistribution": { "count": 11, "min": 1, "max": 10321, "sum": 22402, "avg": 2037, "distributionCounter": { "100": 6, "500": 1, "1000": 1, "2000": 1, "5000": 0, "10000": 0, "60000": 2 } }, "queueStats": { "itemsInQueueCount": 1, "itemsInQueueDistribution": { "count": 19, "min": 0, "max": 2, "sum": 22, "avg": 1, "distributionCounter": { "75": 19, "187": 0, "375": 0, "562": 0, "675": 0, "750": 0 } } } }, "successStats": { "count": 1, "processingTimeDistribution": { "count": 1, "min": 513, "max": 513, "sum": 513, "avg": 513, "distributionCounter": { "100": 0, "500": 0, "1000": 1, "2000": 0, "5000": 0, "10000": 0, "60000": 0 } } }, "rejectStats": { "count": 3, "processingTimeDistribution": { "count": 3, "min": 22, "max": 123, "sum": 203, "avg": 68, "distributionCounter": { "100": 2, "500": 1, "1000": 0 } }, "top3RejectionReasons": { "Webhook queue is full, execution is rejected": 1, "Too many webhook dispatches already in flight": 1, "Webhook failed too many times": 1 } }, "failStats": { "count": 1, "processingTimeDistribution": { "count": 1, "min": 1234, "max": 1234, "sum": 1234, "avg": 1234, "distributionCounter": { "100": 0, "500": 0, "1000": 0, "2000": 1, "5000": 0, "10000": 0, "60000": 0 } }, "top3FailReasons": { "429": 1 } }, "errorStats": { "count": 2, "processingTimeDistribution": { "count": 2, "min": 10123, "max": 10321, "sum": 20444, "avg": 10222, "distributionCounter": { "100": 0, "500": 0, "1000": 0, "2000": 0, "5000": 0, "10000": 0, "60000": 2 } }, "top3ErrorReasons": { "java.net.SocketException: Connection reset": 1, "java.io.IOException: Connection reset by peer": 1 } }, "filteredOutStats": { "count": 4, "processingTimeDistribution": { "count": 4, "min": 1, "max": 3, "sum": 8, "avg": 2, "distributionCounter": { "100": 4, "500": 0, "1000": 0 } } } }

Field reference

Parameter

Description

Recommended action

totalStats

Provides total statistic on success, rejected, failed, error, filtered out webhook invocations as well as info about the queue length.

N/A

totalStats → publishedRequestsCount

Total number of webhook invocations to be processed.

N/A

totalStats → successCount

Number of successfully finished webhook invocations. The same as successStats -> count

N/A

totalStats → rejectedCount

Number of rejected by Jira webhooks. Webhook may be rejected by Jira when webhook processing queue or webhook dispatching queue is full or previous attempts to deliver similar webhook invocations failed too many times. The same as rejectStats -> count

Check additional details in rejectStats.top3RejectionReasons. Consider tuning webhook performance parameters as stated in Tuning webhook performance parameters in Jira Data Center | Jira and Jira Service Management | Atlassian Support.

totalStats → failedCount

Number of failed webhook invocations. Jira considers a webhook invocation "failed" if it fails to receive a valid, 2xx response. The same as failStats -> count

Investigate any potential errors with the integration. Check how to get more details from logs Troubleshooting webhooks in Jira Data Center | Jira and Jira Service Management | Atlassian Support

totalStats → errorCount

Number of failed (exception caught) webhook invocations. The same as errorStats -> count

Investigate any potential errors with the integration or network. Check how to get more details from logs Troubleshooting webhooks in Jira Data Center | Jira and Jira Service Management | Atlassian Support

totalStats → filteredOutCount

Number of filtered out webhook invocations. Filtering happens after webhook processing queue but before hitting webhook dispatching queue. The same as filteredOutStats -> count

N/A

totalStats → processingTimeDistribution

Accumulates time in milliseconds for every processed and delivered result (success, reject, fail, error, filteredOut). See Distribution chapter.

N/A

totalStats → queueStats

Contains information about queues utilisation.

Consider tuning webhook performance parameters as stated in Tuning webhook performance parameters in Jira Data Center | Jira and Jira Service Management | Atlassian Support

totalStats → queueStats → itemsInQueueCount

Total count of webhook requests waiting to be processed. Due to the periodic nature of stats snapshots, number could be negative. Whenever snapshot is flushed, itemsInQueueCount becomes equal to zero. Webhooks that were registered during previous snapshot period and finished during current snapshot period, would cause decreasing of itemsInQueueCount below 0.

Positive number indicates there are more started requests than finished requests, negative number indicates there are more finished requests than started requests.

In total statistic itemsInQueueCount should be always positive.

N/A

totalStats → queueStats → itemsInQueueDistribution

Demonstrates queue utilisation level during reporting period.

"count": 19, "min": 0, "max": 2 indicates, that queue utilisation level was updated 19 times, and it was in range [0;2].

distributionCounter provides more details related to the level of utilisation. Its configured to have following thresholds: 10%, 25%, 50%, 75%, 90%, 100% of sum of webhook processing queue size (controlled by webhook.executor.queue.size application property) and webhook dispatching queue (controlled by webhooks.max.in.flight.dispatches application property). It can be used as a relative measure of queue utilisation.

In case of high webhook queue utilisation consider tuning webhook performance parameters as stated in Tuning webhook performance parameters in Jira Data Center | Jira and Jira Service Management | Atlassian Support

successStats

Stats related to successfully finished webhook invocations. Jira considers a webhook invocation successful if it receives a valid, 2xx response.

N/A

successStats → count

Number of successfully finished webhook invocations. The same as totalStats -> successCount

N/A

successStats → processingTimeDistribution

Accumulates time in milliseconds for every successfully processed and delivered webhook invocation. See Distribution chapter.

N/A

rejectStats

Contains information about rejected by Jira webhooks.

Webhook may be rejected by Jira when webhook processing queue or webhook dispatching queue is full or previous attempts to deliver similar webhook invocations failed too many times.

 

rejectStats → count

Number of rejected by Jira webhooks. The same as totalStats -> rejectedCount

Check additional details in rejectStats.top3RejectionReasons. Consider tuning webhook performance parameters as stated in Tuning webhook performance parameters in Jira Data Center | Jira and Jira Service Management | Atlassian Support

rejectStats → processingTimeDistribution

Accumulates time in milliseconds for every rejected by Jira webhook. See Distribution chapter.

N/A

rejectStats → top3RejectionReasons

Provides top 3 (by count) reasons of webhook rejections by Jira.

Expect to see here one of below increased:

Webhook queue is full, execution is rejected whenever webhook processing queue (webhooks.executor.queue.size) is overwhelmed;

Too many webhook dispatches already in flight whenever webhook dispatching queue (webhooks.max.in.flight.dispatches) is overwhelmed;

Webhook failed too many times whenever webhook invocation failed too many times. Jira considers a webhook invocation "failed" if it fails to receive a valid, 2xx response

Consider tuning webhook performance parameters as stated in Tuning webhook performance parameters in Jira Data Center | Jira and Jira Service Management | Atlassian Support

failStats

Contains information about failed webhook invocations. Jira considers a webhook invocation "failed" if it fails to receive a valid, 2xx response.

N/A

failStats → count

Number of failed webhook invocations. The same as totalStats -> failedCount

Investigate any potential errors with the integration. Check how to get more details from logs Troubleshooting webhooks in Jira Data Center | Jira and Jira Service Management | Atlassian Support

failStats → processingTimeDistribution

Accumulates time in milliseconds for every failed webhook invocation. See Distribution chapter.

N/A

failStats → top3FailReasons

Contains http response status codes the most frequent failures for reported period.

Investigate any potential errors with the integration. Check how to get more details from logs Troubleshooting webhooks in Jira Data Center | Jira and Jira Service Management | Atlassian Support

errorStats

Contains information about invocations, during processing of which exception was caught.

N/A

errorStats → count

Number of failed (exception caught) webhook invocations. The same as totalStats -> errorCount

Investigate any potential errors with the integration or network. Check how to get more details from logs Troubleshooting webhooks in Jira Data Center | Jira and Jira Service Management | Atlassian Support

errorStats → processingTimeDistribution

Accumulates time in milliseconds for every exception caught during processing or execution of webhook invocation. See Distribution chapter.

N/A

errorStats → top3ErrorReasons

Contains messages of the most frequent exceptions happened for reported period.

Investigate any potential errors with the integration or network.

filteredOutStats

Contains information about filtered out webhook invocations.

N/A

filteredOutStats → count

Number of filtered out webhook invocations. Filtering happens after webhook processing queue but before hitting webhook dispatching queue. The same as totalStats -> filteredOutCount

N/A

filteredOutStats → processingTimeDistribution

Accumulates time in milliseconds for every filtered out webhook invocation. See Distribution chapter.

N/A

Distributions

In Webhook Jira-STATS distributions are used for processing time (e.g. successStats → processingTimeDistribution) and for the number of items in the webhook queue (totalStats → queueStats → itemsInQueueDistribution). In case of time, distribution thresholds (upper bounds) are always defined as milliseconds, in case of queue it is the count of items in the queue.

Distribution object contains:

  • count – number of measurements

  • min, max, sum, avg – processing time in milliseconds

  • distributionCounter – a histogram of processing times, where each key is an upper bound in milliseconds

Example:

"processingTimeDistribution": { "count": 11, "min": 1, "max": 10321, "sum": 22402, "avg": 2037, "distributionCounter": { "100": 6, "500": 1, "1000": 1, "2000": 1, "5000": 0, "10000": 0, "60000": 1, "9223372036854775807":1 } }

In this example we could see, that distribution is built based on 11 values (count), minimal value is 1 (min), maximal value is 10321 (max), sum of all the values is 22402 (sum), average or arithmetic mean of values is 2037 (avg).

Values are distributed in following manner:

  • 6 values are smaller than 100

  • 1 value is in [500; 1000) range

  • 1 value is in [1000; 2000) range

  • 0 values in [2000; 5000) and [5000; 10000) ranges

  • 1 values is in [10000; 60000) range.

  • 1 value is beyond defined distribution thresholds (java max long value is used as a key), in this case it is bigger than 60000.

Updated on March 4, 2026

Still need help?

The Atlassian Community is here for you.