# PagerDuty Documentation > Full page content for every migrated PagerDuty documentation article, one block per page, each headed by its canonical URL. A lighter link index (including the API reference) is at /llms.txt. --- URL: https://docs.pagerduty.com/account-admin/account-settings # Account Settings Administer account-wide settings Manage account settings such as billing, single sign-on (SSO), user offboarding, incident priorities, and more. > **Required User Permissions:** The Account Owner can manage account settings. To configure account settings, navigate to **User Icon** → **Account Settings** and select from the tabs detailed below: - [Your Subscription](#your-subscription) - [Account Settings](#account-settings) - [Single Sign-On](#single-sign-on) - [Tagging](#tagging) - [User Offboarding](#user-offboarding) - [Mobile Security Settings](#mobile-security-settings) - [Incident Settings](#incident-settings) - [Status Updates](#status-updates) - [Analytics Email Settings](#analytics-email-settings) - [On-Call Readiness](#on-call-readiness) - [PagerDuty AI](#pagerduty-ai) ## Your Subscription Review information about your account's pricing plan and subscription details. For more information, see [Billing, Invoices and Payments](/account-admin/billing#pricing-plan-subscription). ## Account Settings Manage various global settings such as timezone, contact information privacy, and user licensing limits. > **Dark Mode Not Available in Web App:** The PagerDuty web app does not currently offer a dark mode or theme setting. The [PagerDuty mobile app](/get-started/mobile-app-settings#appearance) supports a dark theme. ### Account Details #### Company Name To set the company name: 1. In the web app, navigate to **User Icon** → **Account Settings**. 2. In the **Company Name** field, enter the name of your organization. 3. Click **Save Changes**. #### Default Time Zone New user accounts will use this time zone. If a user prefers a different time zone, they can change it on their user profile. 1. In the web app, navigate to **User Icon** → **Account Settings**. 2. Select a time zone from the dropdown. 3. Click **Save Changes**. #### Contact Details With the options below enabled, contact information is obscured for any user who is not the Account Owner or an Admin. ##### Hide Contact Details 1. In the web app, navigate to **User Icon** → **Account Settings**. 2. Check one or both of the following checkboxes according to your preference: 1. **Hide Contact Phone and SMS Numbers** 2. **Hide Contact Email Addresses** 3. Click **Save Changes**. ### Language Settings You can select a default language for phone notifications for all new and existing users in your account. Users can update their own personal setting if it differs from the default set at the Admin level. To select an account-wide default language for phone notifications: 1. In the web app, navigate to **User Icon** → **Account Settings**. 2. Under **Default Voice Language Setting**, select your preferred language from the dropdown. 3. Click **Save Changes** to set the default language for all new and existing users. ![A screenshot of the PagerDuty web app showing how to select a default voice language setting](/images/kb/53a47f708549c33b86804f983a6a877f8e54ce574084887254ff097a70a6f8e2-account-settings-language.webp) *Select default voice language setting* ### Product Trials View trials for new features or features available on other plans. The Account Owner can enable a trial here if one is available. Trial availability depends on your current plan. [Contact the Sales team](https://www.pagerduty.com/contact-us/) if you have any questions regarding trials. ### Change Account Owner > **User Role After Transferring Account Ownership:** When you transfer account ownership to a different user, your user account role will be changed to Admin. > **Requirement: Transfer Account Ownership to an Active User:** Ensure that the user you are transferring account ownership to has **accepted their invitation to your PagerDuty account**. Once accepted, they are an active user. 1. In the web app, navigate to **User Icon** → **Account Settings**. 2. In the **Change Account Owner** section, enter a search term or select the user you would like to transfer account ownership to. 3. Click **Change account owner**. 4. **Accept** the confirmation message to transfer ownership. #### Account Owner Unavailable If the current account owner has left your company or organization and their PagerDuty login information is not available, follow these steps: 1. Contact your internal IT department to request access to the former Account Owner's email inbox. 2. In your web browser, navigate to your organization's PagerDuty login page, for example `https://your-subdomain.pagerduty.com/sign_in`, enter the former Account Owner's email address, and click **Forgot your password?** to send a password reset email. 3. Follow the instructions in the password reset email to log in to your PagerDuty account as the Account Owner, and follow the [steps above](#change-account-owner) to transfer account ownership to an appropriate user. ### Email Domain Restriction You can use an allow list to restrict the domains that users can enter. This setting applies to both login and contact email addresses. The restriction applies to future updates — if you are enabling the feature for the first time and users have entered email domains that are not on the allow list, their email addresses will continue to work. 1. In the web app, navigate to **User Icon** → **Account Settings**. 2. Under **Email Domain Restriction**, check the boxes to restrict login email addresses and/or contact email addresses (an email address where a user receives notifications). 3. Enter a comma-separated list of domains to allow. 4. Click **Update Email Domain Settings**. Users who enter email domains not specified in the Email Domain Allow List will see alert dialog boxes when entering their login email and/or contact information email. #### Subdomains in Email Addresses If your account uses subdomains in email addresses, check **Allow Subdomains** as a convenience feature. With this feature enabled, the allow list will permit all subdomains under any of the domains listed in the previous section. For example, entering `domain.com` will also allow `subdomain.domain.com` and `subdomain2.subdomain1.domain.com`. ![A screenshot of the PagerDuty web app showing how to configure which subdomains are allowed](/images/kb/15ceab8e46071fd48a9c1418946563d96a18b414f4a0fee1df07ed13c4323d1f-Email_domain_restriction.webp) *Allow subdomains* ### Update Payment Information Update your billing information, including credit card details and purchasing contact information. For more information, see [Billing, Invoices and Payments](/account-admin/billing#invoice-address). ### Account Limits > **Account Limits Not Available:** Account Limits are only available for accounts with month-to-month pricing plans. > > If the Account Limits section is not visible on your Account Settings page, your account may have a user limit built into its pricing plan. In this case, refer to the [section on User Charges](/account-admin/billing#user-charges) for information on adding more users. The Account Owner can set a **Full User Limit** to restrict the maximum number of full users that can be invited. This helps manage the monthly [user charge](/account-admin/billing#user-charges), which is determined based on the highest number of full users in your account at any time during the current month or in prior months. #### Set Full User Limit 1. In the input field, enter the maximum number of users desired. 2. Click **Save changes**. #### Remove Full User Limit 1. Click next to the input field. 2. Click **Save changes**. ### Billing Notifications Configure recipients for invoices and payment receipts. For more information, see [Billing, Invoices and Payments](/account-admin/billing#invoice-emails). ## Single Sign-On Configure which login method to use when users authenticate with PagerDuty. For more information, see [Single Sign-On (SSO)](/account-admin/sso). ## Tagging Use tags to enable faster searches for objects such as teams, escalation policies, and users. Large organizations can use tags to add metadata to indirectly related objects and identify their dotted-line relationships. For more information, see [Contextual Search - Tagging](/account-admin/tagging). ## User Offboarding Automatically address outstanding incident, team, schedule, and escalation policy associations when a user is removed from your PagerDuty account. For more information, see [Offboarding](/account-admin/manage-users/offboarding). ## Mobile Security Settings Optionally enable **Mobile App Lock**, a security setting for the PagerDuty mobile app that locks the app after a period of inactivity. For more information, see [Advanced Mobile Security](/get-started/mobile-app#advanced-mobile-security). ## Incident Settings In the **Incident Settings** tab, you can manage **Incident Priority** and **Reopen Incidents** settings. ### Incident Priority Create a classification scheme to identify the most important incidents from the least important ones. For more information, see [Incident Priority](/incident-management/incidents/incident-priority#configure-incident-priority). ### Reopen Incidents Manage account-wide access to the Reopen Incidents feature. For more information, see [Reopen Incidents](/incident-management/incidents/reopen-incidents#manage-reopen-incidents-settings). ## Status Updates Customize the look and feel of status update emails by uploading a company logo. For more information, see [Status Update Branding](/incident-management/communicate/internal-status-page#status-update-branding). ## Analytics Email Settings > **Availability:** - All paid accounts will receive Analytics emails, regardless of their pricing plan. Admin and Account Owner emails are sent to customers on all plans. Team Manager emails are sent to customers on the Business pricing plan and above. > - Users with a base role of Manager who are also assigned a Team role of Manager on one or more Teams may receive Analytics emails. Account Owners and Global Admins are eligible to receive Analytics emails without any Team roles required. Users with base roles below Manager cannot receive Analytics emails at this time. > - Accounts on the Business and Enterprise Incident Management pricing plans can manage their Analytics email settings from the Analytics Dashboard. Customers on the Professional pricing plan will not have access to this option. Contact the [Sales Team](https://www.pagerduty.com/contact-us/#contact-sales) to upgrade to an account plan with this feature. Administrators can determine who receives weekly Analytics emails using the Analytics Email Settings page, accessible in the PagerDuty web app under **User Icon** → **Account Settings** → **Analytics Email Settings** tab. ![A screenshot of the PagerDuty UI showing the Analytics email settings](/images/kb/dfc97fbd8d0e8f80b0b2456ed4ad6a3a2b26e11f7d867575794d611c35317ef5-analytics_email_settings.webp) *Analytics email settings* There are two types of weekly emails: - **Admin Emails**: Get weekly insights into your organization's performance, address bottlenecks, and get tailored recommendations to improve your operational maturity. - **Team Manager Emails**: Get weekly insights into the escalation policies you manage. View recommendations on how to improve your escalation policies' operational efficiencies. ### Filter Users Make a selection in the **Roles** dropdown and click **Apply** to display only users with a specific [base role](/account-admin/advanced-permissions#base-roles): - **Account Owner** - **Global Admin** - **Manager** - **Responder** - **Observer** - **Limited Stakeholder** - **Stakeholder** - **Restricted Access** In the **Teams** dropdown, search and select one or more [Teams](/account-admin/teams) and click **Apply** to display only associated users. You can also enter a user's name in the search box to display matching users. ![A screenshot of the PagerDuty UI demonstrating the search box for finding a specific user](/images/kb/c10effeb40b555230628daad5493f6f921c75a07ee8eee85135d1ec3787e0eda-search_for_a_user.webp) *Search for a user* ### Configure Email Recipients 1. Check the box next to the desired user's name. 2. In the prompt at the bottom of the screen, click **Include in emails** or **Exclude from emails**. A success banner will confirm your selection: ![A screenshot of a success banner indicating that one user was successfully included to receive Analytics emails](/images/kb/f724662dc6f75cbe5566691a6a10b6c96e3233bb161a6e20d694b852b7611adc-include_one_user.webp) *User successfully included* > **Tip:** To receive Analytics emails, users must be assigned a [Team role](/account-admin/advanced-permissions#team-roles). > > Users with a Responder role cannot receive Analytics emails at this time. ## On-Call Readiness On-Call Readiness Reports help organizations improve incident response quality by ensuring responders have optimal notification rule configurations. You can set a **Default Readiness Profile** that best fits your organization's needs. For more information, see [On-Call Readiness Reports](/incident-management/schedules/readiness-reports). ## PagerDuty AI Configure options for PagerDuty AI, PagerDuty's generative AI assistant. Read [PagerDuty AI](/ai-automation/advance#manage-pagerduty-ai-account-settings) for more information. --- URL: https://docs.pagerduty.com/account-admin/account-subdomains # Account Subdomains Change your account's subdomain PagerDuty accounts are accessible via a personalized subdomain. For example, if your company name is EveryNine Inc., you can set your account's subdomain to `everynine.pagerduty.com`, `e9inc.pagerduty.com`, or anything else, provided that it’s five or more characters long and it’s not already in use. Your account's subdomain is initially configured during [trial activation](/get-started/trial-account-onboarding#create-a-trial-account). Once configured, your account's subdomain will then prepend your account's URL: `[YOUR-SUBDOMAIN].pagerduty.com` If you need to change your account's subdomain from the one initially configured, you will need to perform the following: - [Prepare to Change Your Subdomain](#prepare-to-change-your-subdomain) - [Change Your Subdomain](#change-your-subdomain) > **Availability:** Changing the account subdomain is available for Professional, Business, Enterprise for Incident Management and Digital Operations (Legacy) plans. Accounts on our Free plan are not eligible for changing their subdomain. Please [contact our Sales team](https://www.pagerduty.com/contact-us/#contact-sales) to upgrade your account or visit our [Pricing page](https://www.pagerduty.com/pricing/) for more details on each of our plans. ## Prepare to Change Your Subdomain When changing subdomains, please be mindful of the following: - Integration email addresses for your PagerDuty services will change. - PagerDuty will not notify users of the subdomain change. You will need to communicate the change to your team so they know when and why the old subdomain will no longer be accessible. - Although users can still receive push notifications, the mobile app will not load and users will need to log out and log back in. - Please see [Using the Mobile App](/get-started/mobile-app#log-in-to-the-mobile-app) for more information about logging in and out of the PagerDuty app. - If these steps don't work, you can reset the app in your device settings: - **iOS:** **Settings** → **PagerDuty** → **Reset** . - **Android:** **Settings** → **Apps** → **PagerDuty** → **Storage & cache** → **Clear Cache**. - If you have [Single Sign On](/account-admin/sso) enabled, you will need to adjust your identity provider settings to reflect your new PagerDuty subdomain. - If you are using the bidirectional [Microsoft Teams integration](/integrations/microsoft-teams), you will need to uninstall and reinstall the integration. - There is a minimum of five characters for PagerDuty subdomains. ### Recommended Preparation Steps To prevent any interruption in responders being able to act on their incidents, we recommend using the following action plan before changing your subdomain. | Action | Additional Information | | --- | --- | | Notify users about the upcoming subdomain change | [Sample email template](#sample-email-communication) provided | | Add new email integration addresses within your external tools | _ Recommended to limit impact on alerting_
You can add the new email integration addresses within your integrated monitoring tools before the subdomain change by anticipating the change.
For example:
`service-email.3q1s05nk@old-subdomain.pagerduty.com`will become `service-email.3q1s05nk@new-subdomain.pagerduty.com`.
Otherwise, you can swap existing email integration addresses with new ones after the subdomain change. (**NOTE**: Any emails sent to email
integration addresses with the old subdomain will not trigger incidents
after the subdomain change is complete.) | | Remove old email integration addresses from your external tools | If you added new email integration addresses prior to the subdomain change, remove old email integration addresses from existing integrations for security. | | Change V1 REST API URL endpoints (Decommissioned October 2018) | Any existing scripts hosting v1 REST API URL endpoints need to reflect the new subdomain. | | Change SAML endpoint URL | If SSO is configured, adjust your SAML Endpoint URL to reflect the new subdomain. | ### Sample Email Communication #### Sample Email: Preparation for Subdomain Change > Hi Team, > > On `MM/DD/YY` at `HH:MM AM/PM PDT`, our PagerDuty subdomain will change from `xxxx`.pagerduty.com to `yyyy`.pagerduty.com. This means that our email integration addresses will change. We will be working on making these adjustments to our existing integrations and scripts. > > Please note that after the subdomain change, you will still receive push notifications for your incidents, however you will need to log out and log back into the mobile app to view and take action on incidents. You will also need to use `yyyy`.pagerduty.com to log in to the web app after the subdomain change, as `xxxx`.pagerduty.com will no longer be accessible. > > To log out of the mobile app: > > - **iOS**: Tap the **More** icon → tap the user icon in the top left → tap **Edit** in the upper right → then tap the remove icon . > - **Android**: Tap the **More** icon → tap the user icon in the top right → tap the menu to the right of the account → then tap **Remove this Account**. > > If these steps don't work, you can reset the app in your device settings: > > - **iOS**: **Settings** → **PagerDuty** → Reset switch to **ON** position. > - **Android**: **Settings** → **Apps** → **PagerDuty** → **Storage & cache** → **Clear Cache**. > > Please plan on logging out and logging back into the mobile app immediately after `MM/DD/YY` at `HH:MM AM/PM PDT` to ensure that you can view and take action on your incidents via the mobile app. > > Please let us know if you have any questions. #### Sample Email: After Subdomain Change is Complete > Hi Team, > > This is an update that we’ve completed the subdomain change. > > As a reminder, you must log out and log back in to the mobile app to view and take action on incidents via the mobile app. You must also access `yyyy`.pagerduty.com to go to the web app. > > To log out of the mobile app: > > - **iOS**: Tap the **More** icon → tap the user icon in the top left → tap **Edit** in the upper right → then tap the remove icon . > - **Android**: Tap the **More** icon → tap the user icon in the top right → tap the menu to the right of the account → then tap **Remove this Account**. > > If these steps don't work, you can reset the app in your device settings: > > - **iOS**: **Settings** → **PagerDuty** → Reset switch to **ON** position. > - **Android**: **Settings** → **Apps** → **PagerDuty** → **Storage & cache** → **Clear Cache**. > ## Change Your Subdomain Once you have performed the [necessary preparations](#prepare-to-change-your-subdomain) and you are ready to change your subdomain, please [contact our Support team](https://www.pagerduty.com/contact-us/#contact-support). A support agent can coordinate a date and time to change your subdomain for you. The change will be effective immediately and there is no downtime during the changeover. --- URL: https://docs.pagerduty.com/account-admin/advanced-permissions # Advanced Permissions Configure granular user access with Advanced Permissions Administrators can use Advanced Permissions to specify a user's [Team](/account-admin/teams) role, as well as their level of access to incidents and configuration objects such as [services](/incident-management/services/services-and-integrations), [escalation policies](/incident-management/schedules/escalation-policies), and [schedules](/incident-management/schedules/schedule-basics). Advanced Permissions provide granular access control, allowing you to fully customize permissions according to your organization's needs. > **Availability:** - Advanced Permissions are available on the following pricing plans: PD Reliability Platform plans, as well as Professional, Business, Digital Operations (legacy), and Enterprise for Incident Management plans. [Contact our Sales Team](https://www.pagerduty.com/contact-sales/) if you would like to upgrade to a plan with this feature. > - If Advanced Permissions is included in your plan but is not yet enabled, [contact PagerDuty Support](mailto:support@pagerduty.com) to request enablement. ## Benefits of Advanced Permissions - **Increased Control and Security**: Teams can determine who is allowed to respond to incidents and manage their Team's configuration. Individual users can also create and manage [API user keys/tokens](/account-admin/api-access-keys#generate-a-user-token-rest-api-key). - **Prevent Human Error**: By empowering Teams to control access to their incidents and configuration, accidents that might interfere with a Team's process can be mitigated. - **Limit the Visibility of Sensitive Information**: Teams can be set to private if their incidents or configuration contain sensitive information. > **Free Accounts:** PagerDuty accounts on a Free pricing plan handle user permissions differently. Read [User Roles](/account-admin/user-roles) if your account is on a Free pricing plan. ## Role Types With Advanced Permissions, there are three types of roles: - [Base roles](#base-roles) - [Team roles](#team-roles) - [Object roles](#object-roles) Each role is unique and dictates what a user has access to. ### Base Roles All users in an account have a base role, and when you add a new user, they must be assigned one. A user's base role indicates the default level of access they have to incidents and configuration objects across the entire account. To find your own base role, navigate to **User Icon** → **My Profile** → **Permissions & Teams** tab. Base roles are either flexible or fixed: - **Fixed Base Roles**: A fixed base role is one that you cannot grant more or fewer permissions via a Team role or an object role. - **Flexible Base Roles**: A flexible base role is one that you can grant more or fewer permissions via a Team role or an object role. | Role Name | Role Type | Description | | :---------------------- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Account Owner** | Fixed | Full access to create, update, and delete objects, including other users' permissions. Account Owners can also access the [Subscription](/account-admin/billing) and [Account Settings](/account-admin/account-settings) pages. There can only be one Account Owner per account. | | **Global Admin** | Fixed | Full access to create, update, and delete objects, including user permissions. Global Admins can also [purchase additional user licenses via the Users page](/account-admin/billing#purchase-licenses). | | **Manager** | Flexible | Full access to create, update, and delete objects and administer their configuration settings. At the Account Owner's or Global Admin's discretion, Managers may be given lower access levels for specific objects. | | **Responder** | Flexible | Can take action on incidents, create incidents for any Team, and create schedule overrides. | | **Observer** | Flexible | Can view objects but cannot make modifications. If you assign an Observer to an incident, they temporarily have Responder access to that incident only and can respond to or reassign it. Observers can trigger incidents from the PagerDuty Slack app. | | **Full Stakeholder** | Fixed | Can view objects but cannot make modifications. You cannot assign Full Stakeholders to incidents, nor can they respond to them. For more information, see [Full Stakeholder Users](#full-stakeholder-users). | | **Limited Stakeholder** | Fixed | Can only view and subscribe to [internal status pages](/incident-management/communicate/internal-status-page) and view and edit their user profile. Limited Stakeholders cannot view any other parts of PagerDuty. For more information, see [Limited Stakeholder Users](#limited-stakeholder-users). | | **Restricted Access** | Flexible | You must give Restricted Access users a specific Team or object role before they can view objects in the account. | #### Base Role Actions The following lists detail the actions each base role can take, divided by [flexible](#flexible-base-roles) and [fixed](#fixed-base-roles) roles. For flexible base roles, the table indicates the level of access each role has by default on an account before an administrator configures more or fewer permissions via a Team or object role. > **Feature Permissions:** The lists below are not exhaustive. Check the **Required User Permissions** callouts on each feature's article to find out what permissions are required. #### Flexible Base Roles | Action | Restricted Access | Observer | Responder | Manager | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------- | :------- | :-------- | :------ | | Subscribe to incidents | ✓ | ✓ | ✓ | ✓ | | Create/delete personal REST API access keys/tokens matching permissions level | ✓ | ✓ | ✓ | ✓ | | Respond to their assigned incidents | ✓ | ✓ | ✓ | ✓ | | Addable to schedules and escalation policies | ✓ | ✓ | ✓ | ✓ | | View all public Teams, services, schedules, escalation policies, analytics and post-incident reviews across the entire account | | ✓ | ✓ | ✓ | | View alerts from services that they have access to in the Alerts table. (Permission to view services may be restricted by Team and/or Object roles.) | | ✓ | ✓ | ✓ | | Trigger and respond to incidents for any public Team | | | ✓ | ✓ | | Create/delete overrides on any schedule | | | ✓ | ✓ | | Create custom incident actions | | | | ✓ | | Add/edit/delete any:
∙ On-call schedules
∙ Schedule overrides
∙ Escalation policies
∙ Services
∙ Maintenance windows
∙ Teams
∙ Incident Workflows
∙ Business Services
∙ Business Services on incidents | | | | ✓ | | Edit and update webhooks and extensions | | | | ✓ | | View/edit/delete all private Teams and their services, schedules, and escalation policies across the entire account | | | | | | Create/delete global API key/token | | | | | | ∙ Manage users
∙ Add new users
∙ Delete users
∙ Edit users' profiles and passwords
∙ Configure users' base roles, Team roles, and object roles | | | | | | ∙ Redact Incidents
∙ Administer the account
∙ Change the account owner
∙ Edit billing information
∙ Add/edit/delete single sign on (SSO) properties
∙ Delete the account
∙ Change pricing plans | | | | | #### Fixed Base Roles | Action | Limited Stakeholder | Full Stakeholder | Global Admin | Account Owner | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------ | :--------------- | :----------- | :------------ | | ∙ _Only_ has access to internal status pages and their own user profile
∙ Cannot view any other account objects | ✓ | | | | | Subscribe to incidents | ✓\* | ✓\* | ✓ | ✓ | | Create/delete personal REST API access keys/tokens matching permissions level | | ✓ | ✓ | ✓ | | Respond to their assigned incidents | | | ✓ | ✓ | | Addable to schedules and escalation policies | | | ✓ | ✓ | | View all public Teams, services, schedules, escalation policies, analytics and post-incident reviews across the entire account | | ✓ | ✓ | ✓ | | View alerts from services that they have access to in the Alerts table. (Permission to view services may be restricted by Team and/or Object roles.) | | ✓ | ✓ | ✓ | | Trigger and respond to incidents for any Team | | | ✓ | ✓ | | Create/delete overrides on any schedule | | | ✓ | ✓ | | Create custom incident actions | | | ✓ | ✓ | | Add/edit/delete any:
∙ On-call schedules
∙ Schedule overrides
∙ Escalation policies
∙ Services
∙ Maintenance windows
∙ Teams
∙ Incident Workflows
∙ Business Services
∙ Business Services on incidents | | | ✓ | ✓ | | Edit and update webhooks and extensions | | | ✓ | ✓ | | View/edit/delete all private Teams and their services, schedules, and escalation policies across the entire account | | | ✓ | ✓ | | Create/delete global API access key/token | | | ✓ | ✓ | | ∙ Manage users
∙ Add new users
∙ Delete users
∙ Edit users' profiles and passwords
∙ Configure users' base roles, Team roles, and object roles | | | ✓ | ✓ | | ∙ Redact Incidents
∙ Administer the account
∙ Change the account owner
∙ Edit billing information
∙ Add/edit/delete single sign on (SSO) properties
∙ Delete the account
∙ Change pricing plans | | | | ✓ | \* Limited Stakeholder and Full Stakeholder subscriptions to internal status pages are only available on the following pricing plans: Business, Digital Operations (legacy), and Enterprise for Incident Management. [Contact our Sales Team](https://www.pagerduty.com/contact-sales/) if you would like to upgrade to a plan with this feature. These roles can only subscribe to prioritized incidents appearing on [internal status pages](/incident-management/communicate/internal-status-page). > **Team Responder Base Role (Legacy):** The Team Responder base role was deprecated on April 26, 2019. All users with this role have been changed to an Observer base role. Their Team roles remain the same. #### Full Stakeholder Users Stakeholders can view objects in an account but cannot make modifications. The intended use case for a Stakeholder is to add them as an incident [Subscriber](/incident-management/communicate/communicate-with-stakeholders#add-subscribers-to-an-incident). Stakeholders receive updates about incidents they have subscribed to but cannot take any action. Stakeholder users are available by default on Digital Operations (legacy) and Enterprise for Incident Management plans, and can be [purchased as add-on users](https://www.pagerduty.com/pricing/) on Professional and Business plans. Stakeholder licenses are not billed the same as full users. Contact your account representative for more information. #### Limited Stakeholder Users Limited Stakeholders can view and subscribe to [internal status pages](/incident-management/communicate/internal-status-page) and view their user profile. Limited Stakeholders cannot view any other parts of PagerDuty, whether using the web app or the mobile app. This access level is suited for users who do not need to see all of the alerts, schedules, and responder details in your account. Incident subscriptions are only available for Limited Stakeholders on Business, Digital Operations (legacy), and Enterprise for Incident Management plans. [Contact our Sales Team](https://www.pagerduty.com/contact-sales/) if you would like to upgrade to a plan with this feature. ### Team Roles When you add a user to a [Team](/account-admin/teams), they are also given a Team role. A user's Team role indicates the level of access they have to objects associated with that specific Team. Users may also have a primary Team, which some organizations may need for billing purposes. See [Manage Primary Team](/account-admin/teams#manage-primary-team) for more information. To find your own Team role, navigate to **User Icon** → **My Profile** → **Permissions & Teams** tab. There are three types of Team roles: | Action | Observer | Responder | Manager | | :---------------------------------------------------------------------------------------------------------------------------------- | :------- | :-------- | :------ | | View configuration objects and incidents associated with their Team | ✓ | ✓ | ✓ | | When assigned to an incident, or added as a [Responder](/incident-management/incidents/add-responders): can respond to, acknowledge, and reassign the incident | ✓ | ✓ | ✓ | | Respond to incidents associated with their Team | | ✓ | ✓ | | Trigger incidents for their Team | | ✓ | ✓ | | Create/delete overrides on schedules associated with their Team | | ✓ | ✓ | | Add/edit/delete schedules, escalation policies, services, and maintenance windows associated with their Team | | | ✓ | | Add existing users to their Team | | | ✓ | | Edit and delete their Team | | | ✓ | | Edit and update webhooks and extensions | | | ✓ | When you add a user or assign them to a Team for the first time, their default Team role depends on their base role. You can add users to a Team manually, or automatically when their escalation policy has an associated Team. | Base Role | Default Team Role When Added to a Team | | :------------------ | :------------------------------------- | | Observer\* | Observer | | Stakeholder | Observer | | Restricted Access\* | Observer | | Responder\* | Responder | | Manager\* | Manager | | Global Admin | Manager | | Account Owner | Manager | \* Administrators can adjust these users' default Team roles to grant them more or fewer permissions on a specific Team. ### Object Roles Object roles are levels of access granted for specific configuration objects — a [schedule](/incident-management/schedules/schedule-basics), [escalation policy](/incident-management/schedules/escalation-policies), and/or [service](/incident-management/services/services-and-integrations) — to an individual user. To find your own object-level roles, navigate to **User Icon** → **My Profile** → **Permissions & Teams** tab. There are three types of object roles: | Object Role | Schedule | Escalation Policy | Service | | :------------ | :--------------------------------------------- | :---------------- | :------------------------------------------------------------------------------------ | | **Observer** | Can view | Can view | Can view and add notes to incidents triggered on this service | | **Responder** | Can view schedules and create/delete overrides | Can view | Can view and respond to incidents triggered on this service | | **Manager** | Can edit schedule and create/delete overrides | Can edit | Can edit, set maintenance windows, and respond to incidents triggered on this service | ### How Base, Team, and Object Roles Work Together Base roles establish the level of access a user has across the entire account. Team and object roles give users more or less access to specific objects — schedules, escalation policies, and services — and incidents than their base role alone would allow. ![Diagram detailing how base, Team, and object roles work together](/images/kb/5e51011a1633d56b1a964e06521cba61ce2ebbe7bf3c199715a34ad4f109f818-d3af126-advanced-permissions-roles-together.webp) ## Manage Roles See [Manage Users](/account-admin/manage-users#edit-advanced-permissions-user-roles) for more information on managing Advanced Permissions user roles. ## Team Privacy With Advanced Permissions, Teams can be set to **Private** or **Public**. See [Teams](/account-admin/teams#team-privacy) for more information on Team privacy. ## Respond to Incidents From Other Teams See [Teams](/account-admin/teams#respond-to-incidents-from-other-teams) for more information on responding to incidents from other Teams. ## Migration Role Mapping When an account migrates from [Basic](/account-admin/user-roles) to Advanced Permissions, most basic user roles are automatically mapped to Advanced Permissions base roles. | Basic Permissions | Advanced Permissions | | :---------------- | :------------------- | | Account Owner | Account Owner | | Admin | Global Admin | | Stakeholder | Stakeholder | | User | Manager | | Limited User | Responder | > **Note:** There is no Observer role in [Basic Permissions](/account-admin/user-roles). ## Roles in the REST API and SAML When you provision a user through the REST API or SAML, the user has the **Manager** (`user`) role by default unless specified in the user's `role` property. The value must be one of a set of fixed values that the internal APIs recognize. Invalid requests receive a response with the status `400 Invalid Request`. Values for user records' `role` field correspond with [role types](#role-types) above: | Role Name | Value | Role Type | | :---------------------- | :----------------------- | :-------- | | **Global Admin** | `admin` | Fixed | | **Full Stakeholder** | `read_only_user` | Fixed | | **Limited Stakeholder** | `read_only_limited_user` | Fixed | | **Manager / User** | `user` | Flexible | | **Responder** | `limited_user` | Flexible | | **Observer** | `observer` | Flexible | | **Restricted Access** | `restricted_access` | Flexible | | **Account Owner** \* | `owner` | Fixed | \* You cannot create this role through the REST API or SAML provisioning. --- URL: https://docs.pagerduty.com/account-admin/api-access-keys # API Access Keys Generate and manage REST API and Events API access keys PagerDuty offers two APIs, each requiring a different type of access key: - **REST API**: Allows third parties to interact with configuration data in your account. - **Events API**: Allows you to add PagerDuty's advanced event and incident management functionality to any system that can make an outbound HTTP connection. ## REST API Keys There are two types of REST API keys: - General Access REST API Keys - User Token REST API Keys Both types of REST API keys are 20-character strings. They will produce an error if used with an Events API call. > **REST API Availability:** The REST API is available to all accounts on current pricing plans. It is not available to some accounts on legacy pricing plans. ### Generate a General Access REST API Key > **Required User Permissions:** Admins and the Account Owner can create, disable, enable, and delete general access REST API keys. 1. In the web app, navigate to **Integrations** > **Developer Tools** > **API Access Keys**. 2. Click **Create New API Key**. 3. Enter a **Description** to help you identify the key later. Optionally, check **Read-only API Key** to restrict the key to `GET` calls only. 4. Click **Create Key**. > **API Key Storage:** Store your key in a secure location — this is the only time it is displayed in full. If you lose a key, you must delete it and create a new one. 5. Click **Close**. The key will appear in the API Access Keys table with the following information: description, creation date, API version, access level, and disabled status (including who disabled it and when). ### Disable a General Access REST API Key Disabling a general access REST API key prevents it from working with the REST API. This action does not delete the key — it can be re-enabled at any time. > **Required User Permissions:** Admins and Account Owners can disable general access REST API keys. 1. In the web app, navigate to **Integrations** > **Developer Tools** > **API Access Keys**. 2. In the API Access Keys table, click **Disable** next to the key you want to disable. 3. Confirm your selection in the browser alert. ### Enable a General Access REST API Key 1. In the web app, navigate to **Integrations** > **Developer Tools** > **API Access Keys**. 2. In the API Access Keys table, click **Enable** next to the key you want to enable. ### Delete a General Access REST API Key > **Irreversible Action:** Deleting a general access REST API key permanently removes it from your account and cannot be undone. > **Required User Permissions:** The Account Owner and users with an Admin or Global Admin role can delete general access REST API keys. 1. In the web app, navigate to **Integrations** > **Developer Tools** > **API Access Keys**. 2. In the API Access Keys table, click **Remove** next to the key you want to delete. 3. Confirm your selection in the browser alert. ### Generate a User Token REST API Key > **Requirements:** If your account has [Advanced Permissions](/account-admin/advanced-permissions), you can create a personal REST API key. Requests made with a personal REST API key are restricted to your own permissions. 1. In the web app, navigate to **User Icon** > **My Profile** > **User Settings**. 2. Under **API Access**, click **Create API User Token**. 3. Enter a **Description** to help you identify the key later. 4. Click **Create Key**. > **API Key Storage:** Store your key in a secure location — this is the only time it is displayed in full. 5. Click **Close**. The key will appear in the API Access table with the following information: creation date, last used date, and API version. ### Delete a User Token REST API Key > **Irreversible Action:** Deleting a personal REST API key permanently removes it from your account and cannot be undone. > **Required User Permissions:** Any user can delete their own keys. Account Owners and Admins can delete other users' personal access keys, as long as the other user is not the Account Owner, an Admin, or a Global Admin. 1. In the web app, navigate to **User Icon** > **My Profile** > **User Settings**. 2. Under **API Access**, click **Remove** next to the key you want to delete. 3. Confirm your selection in the browser alert. ## API Scopes In addition to General Access REST API Keys and User Token REST API Keys, you can generate scoped tokens, which offer more granular control over the objects that users and apps can access. Read [Register an App](/developer/register-an-app) in the developer docs for more information. ## Rate Limits To ensure fair access to REST API resources, PagerDuty enforces rate limits. Read [REST API Rate Limits](/developer/build/rest-api-rate-limits) for more information. ## Events API Keys > **Requirements:** The Events API is available to all accounts. Any user with a Manager role or above can generate an integration key. Events API keys are 32-character strings associated with service-level integrations, listed on a service's Integrations tab. Read [Services and Integrations](/incident-management/services/services-and-integrations) for more information on configuring integration keys for the Events API. Event Orchestration, which centralizes event processing, also uses integration keys for the Events API. --- URL: https://docs.pagerduty.com/account-admin/billing # Billing, Invoices and Payments View and administer your PagerDuty account's billing information Manage your PagerDuty account's subscription, billing, and user licensing. Learn more about updating subscription plans, accessing invoices, managing user charges, and keeping payment methods current. Whether you're adjusting your license count, updating billing contacts, or exploring flexible licensing options, this article walks you through each step to ensure accurate billing and streamlined account administration. > **Required User Permissions:** - The Account Owner is the only user that has access to billing-related information in PagerDuty. > - For accounts created from 2023 onwards, both the Account Owner and Global Admins can add user licenses. If your account was created prior to 2023, only Account Owners can add user licenses by default. To grant Global Admins access to add user licenses, have your Account Owner [contact the Support team](https://www.pagerduty.com/contact-us/). > - If you need access to view or change billing, invoice, or payment information for your account, you can find the Account Owner by going to **People** → **Users** and looking for **Account Owner** in the **Role** column. ## Pricing Plan Subscription All PagerDuty accounts are subscribed to a [pricing plan](https://www.pagerduty.com/pricing/). Your pricing plan determines which features are available and affects your invoice amount. You can manage your pricing plan, along with user licenses, add-ons, and billing in the web app by navigating to **User Icon** → **Subscriptions**. ### Upgrade Your Pricing Plan Subscription 1. Navigate to **User Icon** → **Subscriptions**. 2. In the **Subscription Details** card, click **Upgrade Plan**. 3. Select one of the available plans, review and update the purchase details as needed, and click **Complete Your Purchase**. ### Downgrade Your Pricing Plan Subscription To downgrade your pricing plan, [reach out to the Sales team](https://www.pagerduty.com/contact-us/#contact-sales) for assistance. ## Consumption & Platform Usage > **PD Reliability Platform Subscribers:** This view continues to be available for current subscriptions. Accounts on a PD Reliability Platform plan (Limited GA and GA) see an expanded usage report instead — see [Usage Reporting for PD Reliability Platform Subscriptions](#usage-reporting-for-pd-reliability-platform-subscriptions) below. The Consumption & Platform Usage view on the Your Subscription page provides a single, at-a-glance view of how much of your plan and purchased credits have been consumed across three dimensions: Platform Seats, Events, and AI Actions. The panel displays both your seeded allotment (Included in Plan) and your overage consumption (From Credits purchased). This allows you to monitor capacity and track credit burn-down, ensuring you always know whether you are approaching your included limits and how many purchased credits remain. > **Permissions:** The Account Owner is the only user with access to view the Consumption & Platform Usage panel. ### View Platform Usage This feature requires no configuration and appears automatically for Account Owners. 1. Navigate to **User Icon** → **Subscriptions**. 2. Select the **Your Subscription** tab. 3. Scroll below **Subscription Details** to the **Your Platform usage** heading. ### Subscription Details The Subscription Details card sits directly above the usage section and provides context for your current billing cycle. It displays your Current Plan, Stakeholder Seats included, the Plan Period, and your Renewal date. ### Consumption Summary At the top of the Your Platform usage area, the summary bar shows your Total Platform capacity used as a single percentage. A stacked bar underneath visually breaks down consumption by dimension: - Platform Seats (Purple) - Events (Blue) - AI Actions (Green) Below the stacked bar, Total Credits Purchased displays the number of credits used against your total purchased pool. ### Usage Breakdown Click the **Consumption details** button at the bottom-right of the summary panel to view a detailed breakdown. Three cards will expand — one for each dimension — displaying a two-segment progress bar. The darker segment represents what is Included in Plan, and the lighter segment represents what is drawn From Credits purchased. - **Platform Seats**: Displays your seeded seat allotment vs. overage seats. - **Events**: Displays your event allotment vs. overage events. Includes a **View historical Events** link. - **AI Actions**: Displays your AI Action allotment vs. overage actions. Includes a **View historical Usage** link and a **Learn more about AI Actions Consumption** link. > **Card Totals:** Each card summarizes the total units used at the bottom. ### Included in Plan vs. From Credits Purchased When monitoring your consumption, it is important to understand the difference between seeded and overage usage: - **Included in Plan**: The seeded allotment that comes directly with your subscription, for example 20 seats, 20,000 events, or 1,000 AI actions per plan period. - **From Credits purchased**: Consumption that exceeds your seeded allotment. Once your Included in Plan allotment hits 100%, any additional usage automatically begins drawing down from your purchased credits. ### Monitor Your Usage Typical workflows for managing your consumption include: - **Check overall capacity**: Review the Total Platform capacity used percentage for a quick headline number. - **Identify the highest dimension**: Use the color-coded stacked bar to instantly see whether Seats, Events, or AI Actions are driving your consumption. - **Monitor credit burn-down**: Check the Total Credits Purchased line to see how much of your credit pool remains for the current plan period. ## Usage Reporting for PD Reliability Platform Subscriptions Accounts on a PD Reliability Platform plan get an in-depth usage report on the **Your Subscription** page. The report shows how much of your plan and purchased credits you have consumed, breaks usage out by team and by capability, trends usage over time, and lets you download usage reports as a CSV. > **Availability:** This view is available to accounts on a PD Reliability Platform plan (Limited GA and GA). Accounts on other plans continue to see the existing consumption view described above. > **Permissions:** The Account Owner is the only user with access to this view. ### View Your Usage 1. Navigate to **User Icon** → **Subscriptions**. 2. Select the **Your Subscription** tab. Below your plan summary (current plan, Stakeholder seats included, credits, and contract period), the **Usage** section shows consumption for the current billing period, along with when the data was last refreshed. ### Credits The **Credits** card shows how many credits you have used against your total purchased pool. Your plan includes a set amount of each capability; when usage exceeds what is included, the additional usage draws from your shared credit pool. ### Usage by Capability Individual cards break down usage for each capability: **Seats**, **Events**, **AI Actions**, and **LCR Lines**. Each card shows units used against your plan's included allotment, and how much additional usage is drawing from credits. - **Seats**: Billed at your highest seat count during the month. Includes an **Adjust billing** link — see [Reset Your Monthly Seat Peak](#reset-your-monthly-seat-peak). - **AI Actions**: The card menu includes **AI Actions usage by action type**, a breakdown of consumption and credit price per action type (Incident Summarization, Status Update, Paige (SRE Agent), and so on). - **LCR Lines**: Billed at your highest active LCR line count during the month. To review credit conversion rates for each capability, open the page menu (⋯) and select **View credit & billing info**. Rates are tiered by volume; your current tier is highlighted. ### Usage by Team The **Teams** table breaks usage out by team, with a column per capability: Seats used, Events used, LCR Lines, and AI Actions used. You can: - Filter teams by name. - View usage for a **billing period** or a specific **month** using the period selectors. - Page through teams using the pagination controls. > **The Global Row:** Usage that cannot be attributed to a single team appears in the **Global** row. A user's usage appears in Global when they do not have a primary team set — to attribute it to a team, assign their primary team from their PagerDuty profile. LCR lines are attributed to a team only when every service tied to the line is owned by that team. ### Usage Trends Over Time Click a team name (or the expand arrow next to it) to open a monthly usage chart for that team, trending Seats, Events, and AI Actions over time. Click a capability in the chart legend to show or hide it. The Global row can be expanded the same way. ### Download CSV Usage Reports 1. At the top of the **Your Subscription** page, click **Download CSV**. 2. Review the report preview, which lists usage per team plus the Global row and totals for the selected period. 3. The report downloads as `usage-report.csv`. ## View Invoices Invoices automatically send to the Account Owner's login email address every month. The Account Owner can also view them at any time in the web app: 1. Go to **User Icon** → **Subscriptions**. 2. In the **Invoice** section, click **View your Invoice**. A list of invoices will display, with the most recent at the bottom. You can view and download a specific invoice by clicking the **invoice title**. For questions regarding your invoice amount, [contact the Billing Team](https://www.pagerduty.com/contact-us/#contact-billing). ### Invoice Address If you need to display a separate address on your invoices: 1. As the Account Owner, navigate to **User Icon** → **Account Settings** and select the **Account Settings** tab. 2. In the **Update Payment Information** section, click **Update Billing Information**. 3. With the **Billing Contact Information** tab selected, enter the new contact information you would like shown on invoices. 4. Click **Update**. ### Invoice Emails If another user or a member of your company's finance team would like to receive copies of invoices each month, the Account Owner can CC them on invoice and payment-related emails: 1. Go to **User Icon** → **Account Settings** and select the **Account Settings** tab. 2. Under the **Billing Notifications** section, enter a comma-separated list of email addresses in the **Invoice Email Notifications** field. 3. Click **Save Changes**. ### Additional Notification Emails If other users would like to receive usage notifications for AIOps and PagerDuty AI, the Account Owner can add up to five additional emails. 1. Go to **User Icon** → **Account Settings** and select the **Account Settings** tab. 2. Under the **Billing Notifications** section, enter a comma-separated list of email addresses in the **Additional Notifications** field. 3. Click **Save Changes**. ![Billing Notifications](/images/kb/5af1d111b358432f9f56f074d54460825b107fcd8d84c61d74fe630a2ca587ea-Billing_Notifications.png) *Billing Notifications* ## User Charges For accounts with month-to-month pricing plans, your monthly user charge is determined based on the highest number of full users — all [user roles](/account-admin/advanced-permissions#role-types) other than **Stakeholder** or **Limited Stakeholder** — in your account at any time during the current month or in prior months. To reduce your billable license count for any subsequent months, you must [reduce your license count](#reduce-your-pagerduty-license-count). Account Owners can also set a [Full User Limit](/account-admin/account-settings#account-limits) which defines the maximum number of users allowed on the account. > **Annual Plans:** If you anticipate consistent usage, an annual plan may offer cost savings over monthly plans. Contact the [Sales Team](https://www.pagerduty.com/contact-us/#contact-sales) or see the [pricing page](https://www.pagerduty.com/pricing/) for more information. ### Reduce Your PagerDuty License Count Account Owners can decrease the number of purchased licenses by submitting an email request to [renewals@pagerduty.com](mailto:renewals@pagerduty.com) with the desired number of user licenses. > **Important:** - Changes will reflect on the **following month's invoice**. > - To ensure accurate billing, the number of active users in your account must match the requested seat count. **Removing or deleting user accounts will not automatically adjust your monthly charge**. The following resources offer more information about removing users: - [Delete Users](/account-admin/manage-users#delete-users) - [User Offboarding](/account-admin/manage-users/offboarding) - PagerDuty University [User Deprovisioning Course](https://university.pagerduty.com/deleting-users-qt/1494191) ### Flexible Licensing Flexible Licensing allows account administrators to quickly understand which licenses are assigned to each user and how many license types have been deployed. Flexible Licensing makes no changes to your existing license assignments, provides a graphical update to your Users page, and offers the following beneficial changes: - Manage user licenses on the [**Users** page](#manage-licenses-on-the-users-page). - Removes role assignment from the individual user details page. - Manage licenses on the [**Your Subscription** page](#manage-licenses-on-your-subscription-page). The plan details and billing summary will show multiple base licenses where applicable. #### Manage Licenses on the Users Page Manage user licenses from the Users page by navigating to **People** → **Users**. For more information, read [Manage Users](/account-admin/manage-users#add-users). ![Manage Licenses on the Users Page](/images/kb/c350d7b7b14a93b7f4263748e2446a9c39ca5388576153a3e81426e4fccd59a4-flexible-licensing-users-page.webp) *Manage licenses on the Users page* #### Manage Licenses on Your Subscription Page Customers with multiple flexible license products, for example Incident Response and Customer Service Ops, can manage and view license data by navigating to **User Profile** → **Subscriptions**. ![Manage licenses on Your Subscription page](/images/kb/9ae8a333c5fb39fee1b2945b207e4a886990f28d20216915b9f4116163a81fdb-flexible-licensing-subscription-management.webp) *Manage licenses on your Subscriptions page* #### Purchase Licenses **Account Owners**: 1. Navigate to **User Icon** → **Subscriptions** → **Add More Users**. 2. Click to increase the number of licenses and then click **Add More Users**. **Admins or Global Admins**: 1. Navigate to **People** → **Users**. 2. Click **Add Users** in the top right corner of the page. 3. Enter the user's **Name** (first and last) and **Email Address**. 4. Select the type of **License** you would like the user to have. 5. Select the desired **Role** for the user. 6. _(Optional)_: If your account has access to the [Teams](/account-admin/teams) feature, select a **Team** from the dropdown. 7. Click **Add**. If you are adding more than one user, repeat steps 2–7. This will co-term more users for your annual plan with a prorated amount based on when your annual subscription completes. Other objects in your PagerDuty account, such as schedules, services, integrations, extensions, add-ons, and Teams, do not have an effect on billing. You can add users to any number of schedules, escalation policies, or Teams at no additional cost. ### Stakeholder Users Stakeholder users are billed at a different rate than other users and are typically purchased in tiered bundles. For pricing details, contact the [Sales team](https://www.pagerduty.com/contact-us/). You can also read more about Stakeholders' capabilities in [Advanced Permissions](/account-admin/advanced-permissions#fixed-base-roles). #### Add Stakeholder Users To purchase a Stakeholder bundle in the web app: 1. Navigate to **User Icon** → **Subscriptions**. 2. In the **Include Your Stakeholders** section, make a selection from the **Stakeholders** dropdown and click **Add Stakeholders**. 3. Select whether you require a [purchase order](#purchase-orders) and click **Complete Purchase**. ## Reset Your Monthly Seat Peak In consumption-based billing, the number of seats charged is determined by the highest seat count reached during that billing period — known as the monthly seat peak. While seats can be added at any time, the peak only increases automatically; it does not decrease if you offboard users mid-month. > **PD Reliability Platform Subscribers:** On PD Reliability Platform plans, open **Adjust billing** from the **Seats** card on the **Your Subscription** page. Your billable seat count can be adjusted once every 90 days; resets take effect at the start of your next term, and your current month's bill won't change. If your seat count rises above the reset value before the term ends, the higher count automatically becomes the new billable seat count. The **Reset Peak** feature allows account administrators to manually lower the peak to match their current lower seat count. This is useful when users have been offboarded and you want your next bill to reflect the reduced headcount. > **Important Billing Behavior:** **Next Period Effect:** The reset only affects the next billing period. Your current month's bill will still reflect the highest peak reached during the current month. To see your billing details, navigate to **Account Settings** → **Your Subscription** → **Subscription Details**, where the Plan Period field shows your current billing start and end dates. > > **Automatic Re-adjustments**: If your seat count exceeds the new peak before the current billing period closes, the higher count will automatically become the new peak. ### How to Reset Your Monthly Seat Peak > **Adjust Billing Button Visibility:** The **Adjust Billing** function is only available when your current seat count is lower than your monthly seat peak. 1. Navigate to **User Icon** → **Account Settings** → **Your Subscription**. 2. Locate the **PD Reliability Platform Seats** card and click **Adjust Billing**. 3. Review the button label, which displays the current peak and the new target count. 4. Click **Adjust to #### seats**. ![Adjust current seats](/images/kb/b09928b2b38ac15b43238961a95e102e4bc7956ee25bff9d969ec48e1fbf0463-image_20260819_050106_1.webp) *Adjust current seats* 5. In the confirmation dialog, review the summary and confirm that the change takes effect on your next billing period. 6. Click **Confirm reset**. Once confirmed, the UI will update immediately. You will also receive an in-app notification and a confirmation email. ## PagerDuty AIOps Consumption Based Pricing [PagerDuty AIOps](/ai-automation/aiops/overview) is licensed per accepted event. Accepted events are any valid events that are sent to and processed by PagerDuty via email integration or API with a successful `2xx` response. The number of events correlates with the number of `2xx` responses received back from the Events API. This means that all events accepted are counted, including: - Events sent to [Events API v1](/developer/events-api-v1-overview), [Events API v2](/developer/events-api-v2-overview), `x-ere`, and others - API events sent to a service key or a Global Orchestration - Email events - Trigger, resolve, and acknowledge event actions - Deduplicated or suppressed events - Events sent to a service in maintenance mode - Events sent to a disabled service - Redundant resolves where a service continues to send resolves on the same incident - Events that are later dropped due to rules or customer event transformations Events that are not counted include: - Events rejected at the API due to rate limiting, throttling, or an error - Events sent to deleted routing keys (integrations or orchestrations) — these do receive a `2xx` response for security reasons - Change events - REST API calls - Incidents created through the REST API ## Purchase Orders The Account Owner can add a purchase order number to invoices during the checkout process: 1. Go to **User Icon** → **Subscriptions**. 2. In the **Add More Users** section, update the new number of full users. ![Add more users](/images/kb/9d67d1eaefd35dc9b5c55b9f9c00450ca7128fd2f622772b2834f18f4c45d79b-add_more_users.webp) *Add more users* 3. Click **Add More Users**. 4. Under **Do you require a purchase order for this order?**, select **YES**. 5. Enter your purchase order number. - _(Optional)_: If you do not have a purchase order on hand, you may select **Not Available** to complete the purchase now and provide a purchase order number later. 6. Click **Complete Purchase**. ![Complete your purchase](/images/kb/4d7c0643c8a9e43b9e9247fe2317f32be5fd5c717158a3921e10121529fc96df-complete_your_purchase.webp) *Complete your purchase* ## Notifications Customers on all modern pricing plans have access to unlimited worldwide push and email notifications, and incident notifications do not affect your billing amount. Customers on Professional, Business, Enterprise for Incident Management, and Digital Operations (Legacy) plans also have an unlimited number of international SMS and phone notifications, while Free accounts can use 100 SMS and phone notifications per month. ## Update Credit Card Information The Account Owner can update credit card information in the web app: 1. Navigate to **User Icon** → **Subscriptions**. 2. In the **Billing Summary** section, select **Update your Billing Address or Credit Card Information**. 3. Select the **Credit Card Details** tab and enter the new credit card information. 4. Click **Update**. If you have a past-due invoice, PagerDuty will automatically attempt to use the newly added card to pay its balance within 24 hours. > **Security Note:** PagerDuty Support will never call you asking for credit card information over the phone. > > Support is not authorized to update credit card details over the phone or via other channels. Follow the [steps above](#update-credit-card-information) to update your credit card information. ## Credit Card Authorization Errors If you receive a credit card authorization error, your new billing information will not save until you correct the problem. In most cases, authorization errors are due to issues verifying the address. PagerDuty verifies all billing information with your card issuer, so you may receive an authorization error even if the card has been accepted by other merchants who do not use address verification. Make sure you are using a current address and that the postal code is correct. If you recently updated your address with your card issuer and the card information you enter is not accepted by PagerDuty, try again at a later time. Some card issuers take up to 72 hours to update your address, meaning address verification attempts will fail until your card issuer completes the address update. Authorization attempts may also fail if you: - Enter an unsupported card. PagerDuty accepts Visa, MasterCard, American Express, Discover, and JCB. - Enter an invalid security code. - This is the 3-digit code on the back of the card for Visa, MasterCard, Discover, or JCB; or the 4-digit code above the 15-digit card number on the front of the card for American Express. - Enter an expired card. - Enter a card that has not yet been activated with the issuer. ## Annual Billing via Invoice Payment via invoice (as opposed to credit card) is available for yearly prepayment plans. [Contact the Sales team](https://www.pagerduty.com/contact-us/#contact-sales) for a quote if you are interested in paying yearly instead of monthly. --- URL: https://docs.pagerduty.com/account-admin/billing/cancel-your-account # Cancel Your Account Permanently cancel your PagerDuty account By canceling your account, PagerDuty will permanently delete the account and all related data. > **Required User Permissions:** The Account Owner is the only user that can cancel an account. > **Loss of Account Access:** Immediately after canceling your account, you will lose access to it. This action is not reversible, and canceled accounts cannot be reactivated or recovered. To cancel your account: 1. In the web app, navigate to **User Icon** → **Account Settings** and select the **Account Settings** tab. - Only the Account Owner has access to **Account Settings**. If you do not see this option under your **User Icon**, please navigate to **People** → **Users** to search for your Account Owner. 2. At the bottom of the page, click **Need to cancel your account?** 3. Read the cancellation prompt carefully. - If your account is billed on a yearly basis, please note that we do not offer prorated refunds. 4. If you would still like to cancel, click **Cancel my Account**. ## Change Account Plans If you would like to change your pricing plan instead of canceling, please refer to our [Pricing Plan Subscription](/account-admin/billing#pricing-plan-subscription) section. --- URL: https://docs.pagerduty.com/account-admin/billing/vendor-form # Vendor Form Download PagerDuty's current signed Vendor Form for use in your organization's procurement and vendor onboarding process. A copy of our current Vendor Form is available for download below: [PagerDuty Vendor Form](https://drive.google.com/file/d/1WrQJJqki3-imV856uNLabs8WL_dVMNwj/view?usp=drive_link) --- URL: https://docs.pagerduty.com/account-admin/billing/w-9 # Form W-9 Download PagerDuty's current signed Form W-9 for tax and vendor verification purposes, or contact Billing for other formats. A copy of our current Form W-9 is available for download below: [2026 PagerDuty W-9](https://drive.google.com/file/d/1-FC6hzMnuyQi7e8kw0nMXKiZMw7a4-3n/view) If the form above does not meet your needs, please contact our [Billing Team](https://www.pagerduty.com/contact-us/#contact-billing). --- URL: https://docs.pagerduty.com/account-admin/consolidate-multiple-pagerduty-accounts # Consolidate Multiple PagerDuty Accounts Manually migrate objects, users, and settings between PagerDuty accounts If you are migrating a subdomain that has a relatively low number of objects (services, integrations, etc.), you can take an hour or two to manually move these objects and settings to your new account. > **PagerDuty Professional Services:** If you do not wish to consolidate accounts on your own and would like our team to do a migration, please contact your Account Manager about purchasing PagerDuty Professional Services. To consolidate your own accounts: 1. Manually copy objects (services, integrations, etc.) from the old subdomain to your new subdomain. When adding the services and objects to the new account, you can keep the services in [maintenance mode](/incident-management/services/maintenance-windows) until you are ready for events to route to those services. Once you are ready, one by one, put the service on the old account into maintenance mode and activate the service replacing that service on the new account. Doing this one by one will limit downtime. 2. Once you have manually moved these objects, there may also still be a need to copy users to your subdomain. If you don't want to manually add those users, you have two options: - The first option is to use the `import_users` script, which is listed in our [public support scripts repository](https://github.com/PagerDuty/public-support-scripts/tree/master/import_users). - The second option, if you aren't totally comfortable using that script, or would like some help, you can also submit a formal request by [emailing our Support team](mailto:support@pagerduty.com). 3. Once these users are copied into the account, you can configure the services, escalation policies and schedules they are associated with. 4. When you are ready and no longer using the former account, you can close it permanently by navigating to **User Icon** → **Account Settings** → **Need to cancel your account?** → **I am okay deleting my data and account**. --- URL: https://docs.pagerduty.com/account-admin/manage-users # Manage Users Add and manage users View, add, edit, or delete users from your PagerDuty account. ## View Users > **Required User Permissions:** All users, except Limited Stakeholders, can view users. You can view a list of users in your account by navigating to **People** → **Users** in the PagerDuty web app. ### User License Counts At the top of the Users page you can view how many of your licenses for **Full Users** or **Stakeholder Users** have been used. ### Search You may use the left search bar to search for users by **name** or **email**. ### Filters #### Filter by Team From the **Team** dropdown you can filter users by: - **All Teams** - **My Teams** - Or you can select a specific Team #### Filter by Tags From the **Tags** dropdown, you can search and select specific tags to filter users. #### Filter by Base Role From the **Base Roles** dropdown you can search and select base roles to filter users. ## Add Users > **Required User Permissions:** Admin, Global Admin, and Account Owner base roles can add users. > > You can find users with a specific role by going to **People** → **Users** in the web app and making a selection from the **Base Roles** dropdown. > **Free Plan User Limit:** Free plans are limited to five users. To add a user: 1. In the PagerDuty web app, navigate to **People** → **Users**. 2. Click **Add Users** in the top right corner of the page. 3. Enter the user's **Name** (first and last) and **Email Address**. 4. If applicable, select the type of **License** you would like the user to have. 5. Select the desired **Base Role** for the user. 6. _Optional_: If your account has access to the [Teams](/account-admin/teams) feature, select a **Team** from the dropdown. 7. Click **Add**. Repeat steps 3–7 to add more users. When you click **Add**, an invitation email will be sent to each user's email address. They will be prompted to accept the invitation to PagerDuty, choose a password, and set up their user profile. > **Import Users from a CSV:** To add users in bulk, there is also an option to import users with a CSV file. See [Import Users from a CSV](/account-admin/manage-users/import-csv) to learn more. > **SCIM User Provisioning:** You can also manage users via the standards-based SCIM protocol, by synchronizing the user database with common Identity Providers (IdPs). The IdPs currently supported are Okta, OneLogin, and MS Entra ID. See [SCIM User Provisioning](/account-admin/manage-users/scim-user-provisioning) to learn more. ### Common Issues When Adding Users There are three common reasons why you may not be able to add a user to your account: 1. You do not have permission to add a user based on your user role. See the [Required User Permissions callout](#add-users) in the previous section. 2. There are [User License Limits](#user-license-limits) set on your account. 3. To add a new user, they must have a unique email, and you may be trying to add a user with an email that already exists in the account. To check if this user and their associated email already exist in your account, navigate to **People** → **Users** and search for their name or email in the left-hand search bar. ### User License Limits Accounts on an annual plan have a Full User limit and a Stakeholder limit, based on the amount of licenses that have been purchased. You can view how many licenses have been purchased for your account at **People** → **Users** at the top of the page. For example, if you have purchased 20 Full Users for your account, and there are already 20 Full Users on your account, then neither the Account Owner nor an Admin can add more users until the User License Limit is increased. If you are an Account Owner or Admin and you receive the following errors trying to add new users, you must [add more user licenses](#add-user-licenses): ![A screenshot of the PagerDuty web app showing an error message: You've used all your available licenses](/images/kb/996fe3f3a5a0ec38722931900b5166972a94d5409d8ba490cbeb1f4b97958fd1-manage-users-license-limit-dialog.webp) *User limit error message*
![A screenshot of the PagerDuty web app showing an error message: Max allocated, purchase licenses](/images/kb/510ad335d9ca9b0867251b55ba2a9cfd5fa3991eee0524a378fe71a287086348-manage-users-license-limit-dropdown.webp) *Purchase user licenses* Accounts with month-to-month pricing plans can limit the maximum number of users, which prevents you from inviting new users if the limit has been reached. For more information on this type of user limit, see the [Account Settings](/account-admin/account-settings#account-limits) article. ### Add User Licenses > **Required User Permissions:** - For accounts that were created from 2023 onwards, both the Account Owner and Global Admins can add user licenses. > - If your account was created prior to 2023, only Account Owners can add user licenses by default. You can, however, request that Global Admins also have access to add user licenses. Have your Account Owner [contact the Support team](https://www.pagerduty.com/contact-us/) if you would like this functionality. To add user licenses: 1. In the PagerDuty web app, navigate to **User Icon** → **Subscriptions**. 2. In the **Add More Users** section, click to add more users. Click **Add More Users** to confirm. 3. In the modal that appears, select one of the following responses to **Do you require a purchase order for this order?**: 1. **Yes**: Enter your **PO Number** into the field. If you do not have one available, you may click **Not Available** and provide one at a later date. 2. **No** 4. Click **Complete Purchase**. > **Add More Users Not Available:** If you cannot see the Add More Users section on your Subscriptions page, your account may have a user limit built into its pricing plan. In this case, refer to the [User Charges](/account-admin/billing#user-charges) section to add more users. ### Resend a User Invitation > **Required User Permissions:** Admin, Global Admin, and Account Owner base roles can resend user invitations. You can resend an invitation to a user if they cannot locate the first email that was sent. 1. In the PagerDuty web app, go to **People** → **Users**. 2. Click **Resend Invite** to the right of the desired user's information. A new invitation email will be sent to the email associated with their PagerDuty account. Once a user has accepted an invitation and logged in to their account, the **Resend Invite** link no longer appears next to the user. ## Edit Users ### Edit User Roles You edit user roles in different locations depending on which user role tier your account has: - **[Basic User Roles](#edit-basic-user-roles)**: Accounts with a Free pricing plan, as well as some legacy plans, use basic user roles. - **[Advanced Permissions](#edit-advanced-permissions-user-roles)**: Accounts with a Professional, Business, Digital Operations (legacy), or Enterprise pricing plan use Advanced Permissions. #### Edit Basic User Roles > **Required User Permissions:** Admins, Global Admins, and Account Owners can edit basic user roles. 1. Navigate to **People** → **Users**. 2. Click **Edit** to the right of the user's name. 3. Select your preferred **Role** from the dropdown. 4. Click **Save**. > **Flexible Licensing:** If your account has the Flexible Licensing feature, see [Billing, Invoices and Payments](/account-admin/billing#manage-licenses-on-the-users-page) for more information about editing a user's role on the Users page. #### Edit Advanced Permissions User Roles [Base](#edit-base-roles), [Team](#edit-team-roles), and [object](#edit-object-roles) roles can be managed by different users on the account based on their level of permissions. | Action | Manager (Team role) | Manager (base role) | Global Admin (base role) | Account Owner (base role) | | :--------------------------------------------- | :------------------ | :------------------ | :----------------------- | :------------------------ | | Can edit Team roles of users on _their_ Team | ✓ | ✓ | ✓ | ✓ | | Can edit Team roles for any user on _any_ Team | | ✓ | ✓ | ✓ | | Can edit base roles for any user | | | ✓ | ✓ | | Can edit object roles for any user | | | ✓ | ✓ | ##### Edit Base Roles > **Required User Permissions:** Users with an Account Owner or Global Admin base role can edit other users' base roles. 1. Navigate to **People** → **Users**. 2. Click **Edit** in the **Actions** column to the right of the user's name. 3. Select the desired **Base Role** from the dropdown. 4. Click **Save**. ##### Edit Team Roles > **Required User Permissions:** - Users with an Account Owner, Global Admin, or Manager base role can edit other users' Team roles. > - Users with a Manager _Team role_ can also edit the Team roles of users, but only for users on their Team. **Account Owner, Global Admin, or Manager base roles**: 1. Navigate to **People** → **Users**. Select the user's **name** and click the **Permissions & Teams** tab. 2. Select the desired **Team Role** from the dropdown. **Manager Team roles**: Users with a Manager _Team role_ are only able to edit a user's Team role from their Team's page. 1. Navigate to **People** → **Teams**, then select your **Team**. 2. On the **Users** tab, select the appropriate role under the **Team Role** column for that user. 3. You should see a confirmation modal with the message that their role was updated successfully. If a user is not yet part of a Team, see the [editing Teams](/account-admin/teams#edit-a-team) section. ##### Edit Object Roles > **Required User Permissions:** Users with an Account Owner or Global Admin base role can edit other users' object roles. Note that object roles can only be given to users with a flexible base role — Restricted Access, Observer, Responder, or Manager. 1. Navigate to **People** → **Users**. Select the user's **name**, select the **Permissions & Teams** tab, and click **Edit** next to their Base Role. 2. Under **Additional Permissions** you can assign **Manager**, **Responder**, or **Observer** access to specific objects. Select a **Service**, **Escalation Policy**, and/or **Schedule** from the dropdown in the appropriate access level to assign an object role. 3. Click **Save**. ### Edit User Profiles Read the [User Profiles](/account-admin/user-profile) article for more information on how to edit a user's profile information. ## Delete Users > **Required User Permissions:** Admin, Global Admin, and Account Owner base roles can delete users. > **Offboarding:** The offboarding feature allows administrators to easily deprovision users from their associated escalation policies, schedules, and assigned incidents. PagerDuty accounts with [Advanced Permissions](/account-admin/advanced-permissions) have access to the offboarding feature, which comes standard with the following pricing plans: Business, Digital Operations (legacy), and Enterprise for Incident Management. Read the [Offboarding](/account-admin/manage-users/offboarding) article for more information. To delete a user: 1. Go to **People** → **Users**. 2. Locate the user that you would like to delete, click their **Name**, and then click **Delete User**. 3. If your account has [basic permissions](/account-admin/user-roles) you must confirm that you would like to delete the user. If your account has [advanced permissions](/account-admin/advanced-permissions), you enter the [Offboarding](/account-admin/manage-users/offboarding#offboard-a-user) flow to confirm deletion. ### Common Issues When Deleting Users There are three common reasons why you may not be able to delete a user on your account: 1. You do not have permission to delete a user based on your user role. See the [Required User Permissions callout](#delete-users) in the previous section. 2. The user is still on-call, now and/or in the future, on a schedule and/or escalation policy. To check which schedules and/or escalation policies this user is still on-call for, navigate to **People** → **Users** → click their **name** → select the **On-Call Shifts** tab. You see their schedule, and their escalation policies are listed on the left. 3. There is at least one open incident assigned to that user. > **Deleting Yourself or the Account Owner:** You may not delete your own user account or the Account Owner. If you want to delete your own user account, you need the Account Owner or an Admin to do so for you. If you want to delete the Account Owner, the current Account Owner must first [transfer account ownership](/account-admin/account-settings#change-account-owner) to a different user in the account, and then you can return and delete the previous owner's user account.
--- URL: https://docs.pagerduty.com/account-admin/manage-users/import-csv # Import Users from a CSV Import users to your PagerDuty account from a CSV If you would like to add users in bulk, we offer the following methods using a comma-separated value (CSV) list: - [Import Users with a Self-Serve Ruby Script](#import-users-with-a-self-serve-ruby-script) - [Request Help from PagerDuty Support](#request-help-from-pagerduty-support) ## Import Users with a Self-Serve Ruby Script You can use the following Ruby script to import users on your own: - [ import_users.rb](https://github.com/PagerDuty/public-support-scripts/blob/master/import_users/import_users.rb) You will need the following: - A [general access REST API key](/account-admin/api-access-keys#generate-a-general-access-rest-api-key). - The email address of the user making the change. - The path to your CSV file a command-line argument. The CSV file can have any name, however the path to the file must be correct. ### Example ```ruby ruby import_users.rb -a tKvs3QDNi84Nl326Krdz -e admin@example.com -f ./users.csv ``` The usage instructions for the tool can be found by executing the script with a `-h` or `--help` flag: ```ruby import_users.rb -h Usage: import_users.rb [options] -a, --access-token [String] Access Token -e, --requester-email [String] Requester Email -f, --csv-path [String] Path to CSV file ``` ### CSV Format The CSV file should be in the following format: `name,email,role,title,country code,phone number,team 1;team 2;team 3` - There is no need to include a header in the file, and the title and Teams fields are optional. If the user is on multiple [Teams](/account-admin/teams), separate each Team with a semicolon. - The script will create SMS, phone call, and email [notification rules](/account-admin/user-profile/notification-rules) using the email address and phone number provided. The notification rules will notify users immediately when they are assigned to an incident, however users can adjust these settings later on their [User Profile](/account-admin/user-profile/notification-rules). - The user's role can be `admin`, `user`, `limited_user`, `observer`, `restricted_access`, `read_only_user` (Full Stakeholder), or `read_only_limited_user` (Limited Stakeholder). If a role is not specified, the script defaults to `user`. To see how these values map to values on the webpage, please refer to our section on [Roles in the REST API and SAML](/account-admin/advanced-permissions#roles-in-the-rest-api-and-saml). You can find additional information on user roles and permissions in the following articles: - [User Roles](/account-admin/user-roles) - [Advanced Permissions](/account-admin/advanced-permissions) #### Example ``` Joe User,ju@example.com,user,Operations Engineer,1,5555555555,Engineering;Operations Bob Dobbs,bd@example.com,admin,Director of Engineering,86,15555555554,Engineering;Operations;Leadership ``` ## Request Help from PagerDuty Support > **Required Role:** Only the Account Owner can request user import assistance from Support. > > If you do not not have the Account Owner [base role](/account-admin/advanced-permissions#base-roles), you can find your Account Owner by navigating to **People** → **Users** and set the **Base roles** filter to **Account Owner**. If you would like to add 25 or more users, the Account Owner of your PagerDuty account can request that PagerDuty Support creates a write-scoped API Key in your account to import the users for you. Please create a spreadsheet with the following columns, in this order: | | | | | | | | | | :--- | :---- | :--- | :---- | :----------- | :----------- | :---- | :-------- | | Name | Email | Role | Title | Country Code | Phone Number | Teams | Team Role | The following spreadsheet templates are available for your use: - [Empty spreadsheet template with column headers ](https://docs.google.com/spreadsheets/d/1v3-KMrAOLfzQUC3GN_8qibZaIJlAHulBmRr9aHj8l9k/edit#gid=0) - [Filled example spreadsheet, showing data formatting](https://docs.google.com/spreadsheets/d/1v3-KMrAOLfzQUC3GN_8qibZaIJlAHulBmRr9aHj8l9k/edit#gid=1056898642) After populating a spreadsheet in this format, export it as a spreadsheet file (e.g., `.CSV`, `.XLSX`, `.NUMBERS`, etc.) and have the Account Owner [contact our Support Team](mailto:support@pagerduty.com) to request help importing the users. ### Field Details | Field | Description | | :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Name** (_Required_) | First and last name. | | **Email** (_Required_) | Login email address; must be unique to this user. | | **Role** (_Required_) | A valid REST API user role (`admin`, `user`, `limited_user, observer`, `restricted_access`, `read_only_user`, `read_only_limited_user`). **Note**: `read_only_user`and `read_only_limited_user` roles require Stakeholder user licenses. Read [Billing, Invoices and Payments](/account-admin/billing#stakeholder-users) for more information about Stakeholder users. | | **Title** | Job title. | | **Country Code** | 1-3 digit country calling code. Please refer to [Supported Countries](/incident-management/notifications/supported-countries) for more information about valid country codes. | | **Phone Number** | The user’s phone number where they will receive SMS and phone call notifications. | | **Teams** | [Teams](/account-admin/teams) that the user should be added to. This can include multiple Teams separated by semicolons (`;`). If the Team does not exist, it will be created when the script runs. | | **Team Role** | User role that will be applied to the given Teams. Must be a valid [Team role](/account-admin/advanced-permissions#team-roles) (i.e., Responder, Observer, Manager). | --- URL: https://docs.pagerduty.com/account-admin/manage-users/offboarding # Offboarding Remove users from incidents, escalation policies and schedules The offboarding feature allows administrators to easily deprovision users from their associated incidents, escalation policies and schedules. When offboarding a user, a Global Admin or Account Owner can address triggered and/or acknowledged incidents that were assigned to the offboarded user by reassigning them to their affiliated escalation policy or resolving them. Administrators can also review offboarded users’ escalation policies and schedules, and notify the user’s Team Manager\* that escalation policies and schedules may need attention. \* _If the user is not part of a [Team](/account-admin/teams), Global Admins and the Account Owner will be notified to perform these actions._ > **Requirements:** Offboarding is available on the following pricing plans: Business, Digital Operations (legacy) and Enterprise for Incident Management. ![A screenshot of the PagerDuty web app showing an administrator's view of the prompt to delete a user from the account](/images/kb/913a1096ef11389209c9f99e6745fb20269a6444fef51ac1f34228f4cfd811e1-offboarding-overview.webp) *Offboard a user* ## Configure Offboarding Settings > **Required User Permissions:** The Account Owner can configure offboarding settings. ### Users With Assigned Incidents Settings #### Enable Incident Reassignment (Recommended) By default, the offboarding feature will be set to **Fail if you try to remove a user with assigned incidents**. In order to take advantage of the incident reassignment capability, the Account Owner must change this setting. To enable incident reassignment: 1. Navigate to **User Icon** → **Account Settings** → **User Offboarding**. 2. Under **Choose how assigned incidents are handled**, select **Automatically restart the incidents on their escalation policy**. 3. Click **Save**. #### Disable Incident Reassignment If you would not like incidents to be automatically reassigned to another user on the incident’s escalation policy, you can _optionally_ choose to turn off this behavior. > **Warning:** By changing this setting, you will be required to resolve any incidents that are assigned to the user before you can offboard them. Alternatively, you can manually reassign the incident to another user of your choice, and then begin the offboarding flow. To disable incident reassignment: 1. Navigate to **User Icon** → **Account Settings** → **User Offboarding**. 2. Select **Fail the removal of any user with assigned incidents (default)**. 3. Click **Save**. ### Gaps in Escalation Policies and Schedules Settings When users are offboarded, they are removed from any escalation policies or schedules they were on, leaving a placeholder. PagerDuty sends an email notification about these gaps so that impacted users can [update the escalation policies](/incident-management/schedules/escalation-policies#edit-an-escalation-policy) or [schedules](/incident-management/schedules/edit-schedules#add-users-to-existing-schedules) accordingly. You may also configure who is notified about escalation policy and schedule gaps by following the instructions below: 1. Navigate to **User Icon** → **Account Settings** → **User Offboarding**. 2. In the section **Gaps in escalation policies and schedules**, select settings under the following headers based on your preferences: 1. **If an escalation policy or schedule has a gap and is owned by a team, then:** 1. **Notify all team members that have the Manager role (recommended)** 2. **Do not notify any team members** 2. **If there are no managers on the team, or if the escalation policy/schedule is not affiliated with a team, then send the notification to:** 1. **All Global Admins and the Account Owner (default)** 2. **The Account Owner** 3. **The specific users listed here (at least one must be selected)**: Search and select at least one user from the dropdown. 3. Click **Save**. ## Offboard a User > **Required User Permissions:** Global Admins and the Account Owner can offboard a user. 1. Navigate to **People** → **Users**. 2. Search for and select the **name** of the user that you wish to offboard. Click **Delete User** on the right side of the user profile screen. 3. On the next screen, if the user has any open incidents assigned to them, you will need to select the incident **checkbox(es)** and either **Reassign to EP** or **Resolve** their incidents. We recommend reassigning these incidents to their associated escalation policy, which will notify a different user on that escalation policy. > **Incident Assignment:** If you choose to reassign and the offboarded user is the _only_ on-call person on an escalation policy, the incident will be reassigned to the Account Owner. If the user does not have any open incidents assigned to them, you will not see this screen and you can continue to step 4. 4. On the next screen, you will be able to review the user’s associated escalation policies and schedules. You may proactively remove the user from these objects yourself, or, if you click **Next** it will send an email notification to Team Managers assigned to those escalation policies and schedules that they need to be replaced with another user on these objects. **Note**: If the user is not associated with any Team, or if they are on a Team without an assigned Manager, this notification email will be sent to Global Admins and the Account Owner. 5. Once the above details have been reviewed, click **Delete User**. See [Post-Offboarding](#post-offboarding) below for more details on the post-offboarding flow for Team Managers (or Global Admins and the Account Owner, if applicable). ### Post-Offboarding > **Required User Permissions:** When a user is offboarded, the following administrators will be notified in this order depending on account [configuration](#configure-offboarding-settings): > > - **Default**: [Team](/account-admin/teams) Managers associated with the offboarded user will need to take action in their PagerDuty account. > - **Secondary**: If the offboarded user is not associated with a Team, or if they are on a Team without an assigned Manager, Global Admins and the Account Owner will receive a notification about required actions. When a Global Admin or Account Owner offboards a user, the following changes will be visible in your PagerDuty account, prompting administrators (see Required User Permissions callout above) to take action: - Any incidents that were assigned to the offboarded user will need to be either resolved or reassigned to a different user based on the selections made in the [offboarding flow](#offboard-a-user). - The offboarded user will appear in their old [Escalation Policies](/incident-management/schedules/escalation-policies) and [Schedules](/incident-management/schedules/schedule-basics) as a placeholder stub. Notification banners will instruct administrators to replace them with different users: ![A screenshot of the PagerDuty web app showing an escalation policy with an inactive user's placeholder stub](/images/kb/741d693119c404dba0fa20113a9314aa3db21f760c06e195e09e28e0f1d494b3-offboarding-inactive-user-escalation-policy.webp) *Escalation policy with an inactive user* ![A screenshot of the PagerDuty web app showing an on-call schedule with an inactive user's placeholder stub](/images/kb/80c138cfb292c635179cc80ad2a12675d48176be6858fd4be5f162f7d9c702df-offboarding-inactive-user-schedule.webp) *On-call schedule with an inactive user* #### Email Notification Administrators will receive a notification email instructing them to replace the offboarded user with another user on the indicated escalation policies and schedules. ![An image of an email notification that a user was removed](/images/kb/bfc06488c7bbd836aeab6aa5771b5e360abbf9715aa84fa335edc530c1299fd0-offboarding-team-manager-email.webp) *Offboarded user email* --- URL: https://docs.pagerduty.com/account-admin/manage-users/scim-user-provisioning # SCIM User Provisioning Use System for Cross-domain Identity Management (SCIM) provisioning to sync and manage PagerDuty users with Okta, OneLogin or Entra ID ## SCIM User Provisioning Automatically manage users in your PagerDuty account via SCIM and keep them synchronized with supported IdPs: - [Microsoft Entra ID](/account-admin/sso/microsoft-entra) - [Okta](/account-admin/sso/okta) - [OneLogin](/account-admin/sso/onelogin) > **Availability:** SCIM user provisioning is available on all plans and in all service regions. ## Supported Roles Supported roles for SCIM provisioning are as follows: | Role Name | Value | Role Type | | :---------------------- | :----------------------- | :-------- | | **Global Admin** | `admin` | Fixed | | **Full Stakeholder** | `read_only_user` | Fixed | | **Limited Stakeholder** | `read_only_limited_user` | Fixed | | **Manager / User** | `user` | Flexible | | **Responder** | `limited_user` | Flexible | | **Observer** | `observer` | Flexible | | **Restricted Access** | `restricted_access` | Flexible | | **Account Owner** \* | `owner` | Fixed | > **Note:** You cannot create this role through the REST API or SAML provisioning. ## Configure SCIM User Provisioning ### Enable Incident Reassignment If a user has an assigned incident, you cannot delete them unless you have enabled incident reassignment on your account. See [Enable Incident Reassignment](/account-admin/manage-users/offboarding#enable-incident-reassignment-recommended) for instructions to enable this feature if you have not already done so. ![The PagerDuty user offboarding configuration screen showing incident reassignment settings.](/images/kb/e9bea3f833fcca70bf167f7a3868fb88440d171926889cf916cd785e31c3f515-a1cad672843a026a429a26d44d4b012bf27258526ba6ed7f20882e15a18e95be-User-Offboarding.png) *User offboarding settings* > **Note:** Incident reassignment is part of [User Offboarding](/account-admin/manage-users/offboarding#enable-incident-reassignment-recommended) and is available on the following pricing plans: Business, Digital Operations (legacy), and Enterprise for Incident Management. If your plan does not include incident reassignment, SCIM cannot delete a user who is assigned to any active incidents. To proceed, execute one of the following actions: > > - Manually reassign the active incidents of the user to another user before deprovisioning them. > - Upgrade to a plan that includes incident reassignment to automate this step. ### Create a PagerDuty API Key Create a PagerDuty API key if you do not already have one. For details, see [Create a PagerDuty API Key](/account-admin/api-access-keys#generate-a-general-access-rest-api-key). ### Configure the SCIM Integration in Your IdP Select an IdP for provisioning instructions: - [Microsoft Entra ID](/account-admin/sso/microsoft-entra) - [Okta](/account-admin/sso/okta) - [OneLogin](/account-admin/sso/onelogin) ## Assign or Deactivate Users > **Deactivation Warning:** PagerDuty does not support deactivating and reactivating the same user. If you deactivate a user in the IdP, this action deletes them in PagerDuty. If you reactivate the user, the behavior of the SCIM client implementation of the IdP determines how to reconcile the user. Okta, for example, creates a new user, while OneLogin throws a provisioning error message when the user fails to update. ### Supported User Attributes The PagerDuty SCIM API currently exposes the following user attributes: | Attribute | Type | Read / Write | Description | | :------------- | :------------ | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | String | Read | Unique identifier for the user. | | `userName` | String | Read + Write | Email and username of the user. (Required) | | `displayName` | String | Read + Write | Name displayed in PagerDuty. (Required) | | `externalId` | String | Read + Write | Usually the ID of the IdP for the user. | | `roles` | Array<object> | Read + Write | Single element array containing the role of the user. The accepted role is an object: `{"type": "base", "value": "user"}` where the value matches the list of roles supported by the [public API](/developer/api/reference/rest/users/create-user). | | `active` | Boolean | Read + Write | When set to false, the user is deleted. | | `title` | String | Read + Write | Job title of the user. | | `entitlements` | Array<object> | Read + Write | Single element array containing the license of the user. The accepted entitlement is an object: `{"type": "license", "value": "LICENSE_ID"}` where `LICENSE_ID` is a license ID sourced from the [public API licenses endpoint](/developer/api/reference/rest/licenses/list-licenses). | | `timezone` | String | Read + Write | IANA formatted time zone for the user. | --- URL: https://docs.pagerduty.com/account-admin/manage-users/session-timeouts # Session Timeouts Configure idle and absolute session timeout limits for web and mobile logins to enforce stricter account-wide security policies. Configurable session timeouts allow you to enforce stricter security policies than PagerDuty's default values. > **Availability:** This feature is available only **via API**. ## Timeout Types You can define two types of timeouts for both web and mobile sessions. ### Idle Timeout Automatically logs out users after a specified period of inactivity, protecting against unauthorized access when users step away from their devices. You can set this value between 60 seconds and 180 days. ### Absolute Timeout Defines the maximum duration a session can remain active since login, regardless of user activity. This ensures regular re-authentication and reduces exposure from potentially compromised sessions. You can set this value between 10 minutes (600 seconds) and 210 days (18,144,000 seconds). ## Default Values Unless you configure custom values, the following defaults apply to your account: | Platform | Idle Timeout | Absolute Timeout | | :------- | :----------- | :--------------- | | Web | 15 minutes | 1 hour | | Mobile | 210 days | 5 years | > **Note:** Accounts created before March 02, 2026 keep their existing timeout settings unless explicitly modified. The defaults apply to new accounts as of March 02, 2026 only. > **Mobile Configuration Limits:** The PagerDuty API currently supports a maximum configuration of 180 days (Idle) and 210 days (Absolute). > If you use the API to configure custom mobile timeouts, you will be limited to these ranges and cannot manually set them back to the 210-day/5-year defaults. To restore the original long-term mobile defaults, you must [Delete your Session Configuration](/developer/api/reference/rest/session-configurations/delete-session-configurations). ## Key Behaviors ### New vs. Existing Sessions When you configure session timeouts, the new values take effect immediately for all new logins. Additionally, all existing sessions of the specified type (mobile, web, or both) are immediately revoked, requiring users to log in again with the new timeout policies in effect. ### Scope Session timeouts apply account-wide to all users. Role-based or user-specific timeout configurations are not supported. ### Integrations Session timeouts do not apply to integrations (such as Jira, Slack, etc.), which continue to use their predefined timeouts. ## Configuring Session Timeouts Session timeouts are configured via the PagerDuty API. You'll need admin or account owner permissions to make changes. For complete API documentation, including authentication requirements, request examples, and response formats, see: - [Get Session Configurations](/developer/api/reference/rest/session-configurations/get-session-configurations) - View your current settings - [Configure Session Timeouts ](/developer/api/reference/rest/session-configurations/update-session-configurations)- Create or update timeout policies - [Delete Session Configurations](/developer/api/reference/rest/session-configurations/delete-session-configurations) - Revert to default values --- URL: https://docs.pagerduty.com/account-admin/pagerduty-and-cisa-0-day-vulnerability-remediation-timelines # PagerDuty and CISA 0-Day Vulnerability Remediation Timelines FAQ covering how PagerDuty prioritizes and communicates remediation timelines for CISA-identified critical and zero-day vulnerabilities. **How does PagerDuty manage critical and zero-day vulnerability remediation timelines from CISA or equivalent agencies?** PagerDuty remediation timelines require teams to address critical and zero-day vulnerabilities as soon as possible and no later than the mandated timeline. This policy applies to advisories from the Cybersecurity and Infrastructure Security Agency (CISA) or equivalent agencies, including the UK National Cyber Security Centre. Teams make every effort to remediate as soon as possible, factoring in the need to test and confirm that the proposed remediation patch does not introduce additional issues. This covers cybersecurity risks introduced by vulnerabilities in open source software and third-party software and hardware, protecting against the risk of compromise through third-party suppliers. **What are the PagerDuty remediation timelines for vulnerabilities?** PagerDuty responses to vulnerabilities, including patching, are informed by NIST 800-53 related controls and FedRAMP Low Impact Baseline Control standards. PagerDuty remediation timelines provide the following periods: - 30 days for High risk vulnerabilities (vulnerabilities with an environmentally-adjusted CVSS score of 7.0 or greater). - 90 days for Moderate risk vulnerabilities (vulnerabilities with an environmentally-adjusted CVSS score of 4.0 to 6.9). - 180 days for all remaining non-zero scores. **How does PagerDuty communicate if a CISA-identified zero-day vulnerability subject to active exploitation impacts the platform?** If a CISA-identified zero-day vulnerability subject to active exploitation impacts PagerDuty, PagerDuty makes every effort to communicate this event and its remediation or migration activities publicly through the Security section of the knowledge base. For example, PagerDuty documented its approach to the remediation of log4j in the [PagerDuty Log4j Zero-Day Vulnerability Updates](/account-admin/pagerduty-log4j-zero-day-vulnerability) article. **How can I confirm if PagerDuty is not impacted by a CISA-identified zero-day vulnerability?** If a CISA-identified zero-day vulnerability subject to active exploitation does not impact PagerDuty, PagerDuty generally does not communicate this publicly. If you require a negative confirmation response, PagerDuty makes every effort to provide a negative confirmation statement through the [PagerDuty Customer Portal](http://assurance.pagerduty.com/). --- URL: https://docs.pagerduty.com/account-admin/pagerduty-log4j-zero-day-vulnerability # PagerDuty Log4j Zero-Day Vulnerability Updates Status updates on PagerDuty's response to the Log4j2 CVEs, including patched versions and mitigation steps for Rundeck customers. ## Summary ### PagerDuty SaaS All PagerDuty systems exposed to the following CVEs have been addressed by upgrading to a patched version of log4j — either 2.16.0 or 2.12.2: - [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) - [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) We currently see no evidence of compromise on our platform. Our teams continue to monitor for new developments and for impacts on sub-processors and dependent systems. PagerDuty SaaS customers do not need to take any additional action for their PagerDuty SaaS environment. The PagerDuty Security team is aware of and has been responding to additional findings regarding vulnerabilities in the Log4j2 libraries identified in [CVE-2021-45105](https://nvd.nist.gov/vuln/detail/CVE-2021-45105). Where feasible, additional patching has occurred to upgrade to 2.17.0. Rundeck will release an updated version to address Log4j 2.17.0 on Tuesday, December 21st. We continue to strongly advise Rundeck customers to upgrade to the fully patched versions (3.3.16 or 3.4.8) immediately to secure and remediate the existing critical severity issues. We continue to monitor the situation and will provide similar remediations should they be necessary. ### Rundeck Enterprise / Community [Rundeck 3.4.8 and 3.3.16](https://download.rundeck.com/) are available as of December 14th, 2021 with the updated libraries necessary to bring Log4j to a secure version. These versions address the following CVEs: - [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) - [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) For details on specific versions and mitigations, see below. ### Partial Mitigation Options for Supported Rundeck Versions 3.3.7–3.4.7 > **Partial Mitigation Only:** This partial mitigation does not fully address the vulnerability. Upgrade to the fully patched versions (3.3.16 or 3.4.8) immediately to bring the libraries to a secure version. If you are running Rundeck Enterprise or Rundeck Community versions 3.4.x or 3.3.x, immediately take the following actions to mitigate the RCE vulnerability: - Add this flag to the JVM options for starting Rundeck: `-Dlog4j2.formatMsgNoLookups=true` - Set env var `LOG4J_FORMAT_MSG_NO_LOOKUPS=true` - Modify the file `$RDECK_BASE/server/config/log4j2.properties` and replace the string `%m` with `%m{nolookups}` Rundeck versions older than one year are not supported and must be updated to a currently supported version immediately. Contact our support team at [support@pagerduty.com](mailto:support@pagerduty.com) or [support@rundeck.com](mailto:support@rundeck.com) with any further questions. *** ## December 15 — Final Update Our teams will continue to monitor for impacts on sub-processor or dependent systems. We have updated all known areas of impact to our SaaS offering and continue to monitor all PagerDuty services and environments. PagerDuty SaaS customers do not need to take any additional action for their PagerDuty SaaS environment. If you are running Rundeck Enterprise or Rundeck Community, apply the following patches to your environment immediately. Rundeck Enterprise versions 3.4.6 and below require immediate patching to mitigate the vulnerability. Further details on the patch and mitigation are available below and on the [Rundeck CVE page](https://docs.rundeck.com/docs/history/CVEs/#log4j-cve-2021-44228). ### Rundeck Enterprise / Community Rundeck 3.4.8 and 3.3.16 are available as of December 14th, 2021 with the updated libraries necessary to bring Log4j to a secure version. These versions address both CVEs issued for the Log4j vulnerabilities. **CVE-2021-44228** - Fixed in Rundeck 3.4.8 / 3.3.16 - Partial fix in Rundeck 3.4.7 / 3.3.15 - Partial mitigation in previous versions (3.4.6 and 3.3.14 and earlier) — see the section below **CVE-2021-45046** - Fixed in Rundeck 3.4.8 / 3.3.16 ### Partial Mitigation Options for Supported Rundeck Versions 3.3.7–3.4.7 > **Partial Mitigation Only:** This partial mitigation does not fully address the vulnerability. Upgrade to the fully patched versions (3.3.16 or 3.4.8) immediately to bring the libraries to a secure version. If you are running Rundeck Enterprise or Rundeck Community versions 3.4.x or 3.3.x, immediately take the following actions to mitigate the RCE vulnerability: - Add this flag to the JVM options for starting Rundeck: `-Dlog4j2.formatMsgNoLookups=true` - Set env var `LOG4J_FORMAT_MSG_NO_LOOKUPS=true` - Modify the file `$RDECK_BASE/server/config/log4j2.properties` and replace the string `%m` with `%m{nolookups}` Rundeck versions older than one year are not supported and must be updated to a currently supported version immediately. Contact our support team at [support@pagerduty.com](mailto:support@pagerduty.com) or [support@rundeck.com](mailto:support@rundeck.com) with any further questions. *** ## December 15 — Update On Friday, December 10th, 2021, PagerDuty became aware of a critical severity zero-day exploit known as "Log4Shell" in the Log4j library, which is widely used in numerous systems, websites, applications, and digital services around the world. We reacted immediately and addressed the known issues across our portfolio in a patch release. Subsequently, on Tuesday, December 14th, 2021, a secondary CVE was published relating to Log4j2. This required a second patch release, which in some cases must be applied by customers on customer-managed products. Rundeck Enterprise and Community customers who have already patched to 3.4.7 must also upgrade to 3.4.8 to address these new vulnerabilities. If you are running Rundeck Enterprise or Rundeck Community, apply the following patches to your environment immediately. Rundeck Enterprise versions 3.4.6 and below require immediate patching to mitigate the vulnerability. Further details on the patch and mitigation are available below and on the [Rundeck CVE page](https://docs.rundeck.com/docs/history/CVEs/#log4j-cve-2021-44228). ### Rundeck Enterprise / Community Rundeck 3.4.8 and 3.3.16 are available as of December 14th, 2021 with the updated libraries necessary to bring Log4j to a secure version. These versions address both CVEs issued for the Log4j vulnerabilities. **CVE-2021-44228** - Fixed in Rundeck 3.4.8 / 3.3.16 - Partial fix in Rundeck 3.4.7 / 3.3.15 - Partial mitigation in previous versions (3.4.6 and 3.3.14 and earlier) — see the section below **CVE-2021-45046** - Fixed in Rundeck 3.4.8 / 3.3.16 ### Partial Mitigation Options for Rundeck Versions 3.4.6 and Below > **Partial Mitigation Only:** This partial mitigation does not fully address the vulnerability. Apply the patches above immediately to bring the libraries to a secure version. If you are running Rundeck Enterprise or Rundeck Community versions 3.4.6 and below, immediately take the following actions to mitigate the RCE vulnerability: - Add this flag to the JVM options for starting Rundeck: `-Dlog4j2.formatMsgNoLookups=true` - Set env var `LOG4J_FORMAT_MSG_NO_LOOKUPS=true` - Modify the file `$RDECK_BASE/server/config/log4j2.properties` and replace the string `%m` with `%m{nolookups}` Contact our support team at [support@pagerduty.com](mailto:support@pagerduty.com) or [support@rundeck.com](mailto:support@rundeck.com) with any further questions. *** ## December 13 On Friday, December 10th, PagerDuty and many others became aware of a critical severity zero-day exploit known as "Log4Shell" in the Log4j library, which is widely used in numerous systems around the internet. We immediately initiated a security incident and have been actively taking steps to mitigate and monitor the situation. We know our customers trust PagerDuty to manage their own incidents, and we want to share a more detailed update on impact and progress to date. PagerDuty's SaaS platform does not make extensive use of Java. In the services and components where we identified use of this library, the vulnerability did not appear exploitable, or we are running a current version not impacted by this exploit. PagerDuty systems that leveraged the vulnerable version of the Log4j library required to mitigate [CVE-2021-44228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228) have been updated. > **Rundeck Enterprise and Open Source Customers:** If you are running Rundeck Enterprise or Open Source, a patch update is required. See the important messages below. - Where we identified the vulnerable library, those services have already been updated, and all known areas were upgraded by end of day Friday, December 10th. - PagerDuty's network and firewall architecture limits the ability of this exploit to succeed, and we have added additional steps at our network layer to reduce the possibility of exploitation. - We continue to monitor for attempts by threat actors to exploit this vulnerability. If your organization is doing the same, you may consider creating an alert in PagerDuty. - Rundeck Enterprise versions 3.4.6 and below require immediate patching to mitigate the vulnerability. Further details on the patch and mitigation are available below and on the [Rundeck CVE page](https://docs.rundeck.com/docs/history/CVEs/#log4j-cve-2021-44228). - We will continue to coordinate with our sub-processors, including AWS, to determine impacts to their environments and services, and will continue to take action on any updates required as we learn of them. ### PagerDuty SaaS Our teams will continue to monitor for impacts on sub-processor or dependent systems. We have updated all known areas of impact to our SaaS offering and continue to monitor all PagerDuty services and environments. PagerDuty SaaS customers do not need to take any additional action for their PagerDuty SaaS environment. ### Rundeck Enterprise / OSS If you are running Rundeck Enterprise or Open Source versions 3.4.6 and below, immediately take the following actions to mitigate the CVE: - Add this flag to the JVM options for starting Rundeck: `-Dlog4j2.formatMsgNoLookups=true` - Set env var `LOG4J_FORMAT_MSG_NO_LOOKUPS=true` - Modify the file `$RDECK_BASE/server/config/log4j2.properties` and replace the string `%m` with `%m{nolookups}` Rundeck 3.4.7 GA is available as of December 10th with the updated libraries necessary to bring Log4j to a safe version: - [Enterprise](https://packagecloud.io/pagerduty/rundeckpro) - [Community](https://packagecloud.io/pagerduty/rundeck) Rundeck 3.3.15 GA was released on December 13th. Contact our support team at [support@pagerduty.com](mailto:support@pagerduty.com) or [support@rundeck.com](mailto:support@rundeck.com) with any further questions. --- URL: https://docs.pagerduty.com/account-admin/pagerduty-rundeck-automation-self-hosted-key-pair-misconfiguration # PagerDuty Runbook Automation Self-Hosted / Rundeck Key Pair Misconfiguration Details a hard-coded SSH key pair shipped with older Rundeck Docker builds and the steps to detect and rotate exposed keys. The following details a possible misconfiguration of SSH on Rundeck nodes. This misconfiguration only impacts Docker distributions for PagerDuty Runbook Automation Self-Hosted and Rundeck versions 4.0 and earlier, not Debian, RPM or .WAR. ## Overview - [CVE-2022-29186](https://docs.rundeck.com/docs/history/CVEs/CVE-2022-29186.html) Docker distributions for PagerDuty PagerDuty Runbook Automation Self-Hosted and Rundeck versions 4.0 and earlier contain a hard-coded SSH key pair generated at packaging time. In Docker installations, new projects have a default path pointing to the exposed key. If no new key pair was generated, and a user copied the public key to the `authorized_keys` files on a remote host, anyone with the exposed private key would have access to the host with the same privileges as the PagerDuty Runbook Automation Self-Hosted user. There are two ways a user could have mistakenly copied the packaging key to a production instance: 1. The [tutorial documentation](https://docs.rundeck.com/docs/learning/howto/ssh-on-linux-nodes.html) for setting up a learning environment included instructions to copy a default key to the `authorized_keys` file on the remote SSH node. If a user searched the internet for “Rundeck SSH”, the tutorial documents are currently the top result, and a user following them to set up their Production environment could have copied the hard-coded packaging key since it exists in the same file path as the one noted in the documentation. This documentation is now updated with new instructions to avoid this misconfiguration. 2. The other way a user could have copied the key is if they followed the official [SSH configuration documentation](https://docs.rundeck.com/docs/manual/projects/node-execution/ssh.html#configuring-remote-machine-for-ssh), logged into the container (‘client’ in the documentation) as the Rundeck user, or exec’d in, and then ran the `ssh-keygen` command there. If so, the packaging key would already have been in the file path where the new key was to be stored and the system would have prompted the user to confirm they wished to overwrite the existing key. If the user declined and continued following the official instructions to copy the key to their production nodes, they would have copied the exposed key. ## Action Items Due to the potential severity of this misconfiguration, your prompt action on this matter is important. The following steps are available to discover and remediate this key pair issue: 1. To determine whether your systems are affected, it is necessary to scan endpoints in your environment. Please use or adapt one of the options [here](https://github.com/rundeck/affected-keys-checks). 2. If any of the exposed keys are found, delete them and follow the [official SSH configuration instructions](https://docs.rundeck.com/docs/manual/projects/node-execution/ssh.html#ssh-key-generation) to replace them with secure, private key pairs. PagerDuty Runbook Automation Self-Hosted version 4.1 and Rundeck version 4.1 will not contain a key pair, and we have replaced prior versions in the Downloads section of our website. Please note that upgrading to a newer version will not remove the vulnerability if one of the exposed keys has been copied to your hosts. Scanning for the exposed keys and rotating them are the only remediation. 3. If you would like to prevent the possibility of exposed key pairs being copied to your production nodes in the future, follow [these steps](https://docs.rundeck.com/docs/learning/howto/revoke-ssh-keys.html) to set up a key revocation file and populate it with the exposed keys. --- URL: https://docs.pagerduty.com/account-admin/premium-services-customer-portal # Premium Services Customer Portal Manage account properties, service requests, and training through the Premium Services Customer Portal The Premium Services Customer Portal is a comprehensive platform offering a range of tools aimed at enhancing organizational processes, productivity, and innovation. It enables users to efficiently manage their accounts, access educational materials, and engage with support services. Additionally, the portal includes functionalities like onboarding assistance for new users, alerts for best practice configurations, and a feedback tool, facilitating streamlined operations and improved user experiences within the organization. ## Log In to the Premium Services Customer Portal Logging in to the Premium Services Customer Portal is similar to accessing the PagerDuty web app. Please read [Log In to PagerDuty](/get-started/log-in-to-pagerduty) for more information. 1. Navigate to the [Premium Services Customer Portal](https://portal.innovation.csg.pagerduty.com/login) in your web browser and click **Premium Customer Login (PagerDuty Login/Password)**. 2. Enter the **Email** associated with your PagerDuty account and click **Next**. 3. Enter your **Password** and click **Sign In**, *or* click **Sign In with Single Sign-On** if your account uses SSO. SSO users should enter their **Account Subdomain** and **Account Service Region**, and then click **Continue with Single Sign-On**. ### Log out of the Premium Services Customer Portal To log out of the Premium Services Customer Portal, click the power icon in the left menu. ## Dashboard ### Overview When you log in to the Premium Services Customer Portal you'll see a welcome message, a badge displaying your account's package (e.g., Silver, Gold), an overview of your account's properties, and your assigned PagerDuty points of contact: - **Company Name** - **Subdomain** - **Account Manager** - **Customer Success Manager** - **Customer Success Engineer** - **Technical Support Engineer** - **Engagement Manager** - **Professional Services Lead** Should an issue arise, you can use this information to direct a message to the most relevant point of contact. #### Submit a New Request 1. Click **Submit New Request Here** and make a selection from the dropdown: 1. **New Service Request** 2. **New Premium Support Request** 3. **New PDU Request** 4. **New Feature Request** 5. **Other Request** 2. In the message modal, enter the **Request Urgency** and **Request Detail**. 3. Click **Submit**. ### Service Requests Summary The Service Requests Summary provides an overview of the information related to your account's service requests: - **Current Period Start** and **Current Period End** - **Hours Used** - **Hours Available** - **Hours Expire** - **Open Requests** - **Closed Requests** - **Total Requests in Period** Click **View Summary of Requests in Period** for a visualization of requests within the current period. ### PagerDuty University Summary The PagerDuty University Summary provides an overview of the information related to your account's PDU engagement and available services: - **Instructor Led Training Purchased** - **Instructor Led Training Available** - **Registered Courses** - **Completed Courses** - **Certifications** - **Expiration Date** Click **View Summary By User** for a visualization of your users' interaction with PDU materials. ### Professional Services Summary The Professional Services Summary displays information related to recent Professional Services projects, including: **Project Name**, **Engagement Manager** and **Consultant**. Enter a search term to display results that match the project name. ### My Products Depending on the active products in your PagerDuty account, this section displays an overview of how many user licenses are **Purchased**, **Deployed** and **Available**. ### Premium Support Summary If your account has Premium Support, this section displays your **Open Cases**, **Closed Cases** and **Total Cases**. Click **View Case Summary** to open a modal window displaying: - **Case Number** - **Created At** - **Closed At** - **Status** - **Sub-Status** - **Subject** - **Submitted By** Enter a keyword in the search box to narrow results. ## Health Check Alerts Taking action to address Health Check Alerts will ensure proper incident creation, on-call responder notification, escalation, and effective incident management minimizing business impact. Inactive users on escalation policies, for example, can lead to incidents not being created, resulting in extended outages and business impact. The following Health Check Alert represents the condition where one or more inactive users exists on an escalation policy. An inactive user is one that has been deleted from the system, but their profile remains on the escalation policy as a reminder that updates are required. An inactive user can appear directly on an escalation policy layer, or within a schedule placed on an escalation policy layer. ![Escalation policy Health Check Alert](/images/kb/58354e1cad46f422ee83c9fc177f3ba7ef342c7a1022de87815c711500ade236-health_check_alerts.png) *Escalation policy Health Check Alert* **Object Type**: Escalation Policy **Evaluation Method**: PagerDuty API (`/escalation_policies`, `/schedules`) **Alert Values**: Escalation Policy name, total number of inactive users, expected value (0) This Health Check Alert has the following parts: **Discovery**: - All Escalation Policies and all Schedules are discovered in the customer's instance. - Inactive users on each Escalation Policy and Schedule are identified. **Analysis**: The internal metric "Escalation Policy is healthy" is analyzed validating if the inactive users count follows the expected value of zero (0). **Alerting**: For each internal metric evaluated greater than zero (0), a Health Check Alert alert will be generated. Health Check Alerts will also recommend a **Get Well Plan**, in this case "Remove and/or replace user from Escalation Policy or Schedule," and a **Service Request Accelerator (SRA)**. ## My Alerts The My Alerts feature gives you an overview of users, services, escalation policies, and schedules that do not meet best practice configuration standards. Enter a search term to display alerts with matching titles. You can also filter by severity (i.e., **Critical**, **Low**, **Medium**, **High**, **Minor**, **Major**) or entity (i.e., **user**, **service**, **escalation policy**, **schedule**). ### Open a Service Request To open a customer request: 1. On an alert, click **Service Request**. 2. Enter the **Request Urgency** and **Request Detail**. 3. Click **Submit**. ![Open a service request](/images/kb/7809c916526150e07aab14b647f896d352c155f1ad631b1a84521cb742878f13-service_request.png) *Open a service request* ## Leave Feedback The Premium Services Customer Portal offers a built-in tool for collecting user feedback. 1. In the left menu, click the thumbs-up icon to open the feedback modal. 2. Select the face that most closely aligns with your experience. 3. Enter your comments in the text box. 4. Click **Submit**. ![CSG Innovation Portal feedback](/images/kb/57acfbc1fd08522c7304fd3eba9c4f52bb4dd34db3517a84b3f09bd2716729c9-CSG_Innovation_Portal_feedback.png) *Premium Services Customer Portal feedback* --- URL: https://docs.pagerduty.com/account-admin/safelist-ips # Safelist IPs Learn about PagerDuty's best practices for IP safelisting > **Best Practice:** PagerDuty supports safelisting IP addresses. However, this method of ensuring webhook delivery security is no longer best practice. [TLS 1.2](/developer/mutual-tls) and custom headers are now available for webhooks, which will ensure that webhooks deliver from PagerDuty. If you are migrating away from IP safelisting and have questions about PagerDuty's webhook deliverability, [contact our Support Team](https://www.pagerduty.com/contact-us/#contact-support). > **EU Service Region:** Safelist IPs resolving to the URLs corresponding to [your service region](/get-started/service-regions). Currently available regions are US and EU. ## Events API PagerDuty's [Events API](/developer/events-api-v2-overview) is used for triggering, acknowledging, and resolving incidents. To access the Events API, your system must be able to make outbound connections to `events.pagerduty.com` on TCP port 443 (for HTTPS). `events.pagerduty.com` and `events.eu.pagerduty.com` resolve to multiple IPs, which you can find by querying the A records using `dig` or `nslookup`. ### Example Query (US) ```shell $ dig a +short events.pagerduty.com 35.167.69.145 44.231.93.240 44.233.86.211 ``` In this example, the Events API is accessible in the US region at the IPs `35.167.69.145`, `44.231.93.240`, and `44.233.86.211`. ### Example Query (EU) ```shell $ dig a +short events.eu.pagerduty.com 18.159.153.65 18.198.156.244 35.159.34.57 ``` In this example, the Events API is accessible in the EU region at the IPs `18.159.153.65`, `18.198.156.244`, and `35.159.34.57`. ## REST API To access the [REST API](/developer/rest-api-overview), your system must be able to make outbound connections to `api.pagerduty.com` and/or `api.eu.pagerduty.com` on TCP port 443. The REST API only allows HTTPS connections — HTTP connections are not allowed. `api.pagerduty.com` and `api.eu.pagerduty.com` resolve to multiple IPs. These IPs will differ from those used for the [Events API](#events-api) or [webhooks](#webhooks). While the IPs used by the REST API are not expected to change often, they may change from time to time. PagerDuty provides a list of [REST API IPs](/developer/rest-api-ips). Any changes to these IPs will be reflected in that list at least 30 days before they take effect, giving you time to update any filtering you may have in place. Note that while multiple IPs are listed, not all of them may be in use at a given time. To avoid interruptions, do not use DNS lookups to determine the IPs to filter. ## Webhooks [Webhooks](/integrations/webhooks) are HTTP or HTTPS calls sent from PagerDuty to your web server on the IP and port of your choosing. See the current list of IPs that PagerDuty uses to send webhooks in the developer documentation: [Webhook IPs](/developer/webhook-ips). ### Firewalls and Access Control Lists (ACLs) The IP addresses listed in [Webhook IPs](/developer/webhook-ips) are a fixed list and are not expected to change. You can safely hardcode them into your firewall or ACL. > **Webhook IPs:** Prior to May 5th, 2022, the list of Webhook IPs was subject to change without notice. Since Webhook IPs are now fixed, the scripts previously provided to notify you and automatically update EC2 security groups have been retired. ### Incident Workflow Actions Incident Workflow actions that make external HTTP requests — including **Web API** actions such as [Send GET Request](/workflow-actions/web-api-1/send-get-request) and [Send POST Request](/workflow-actions/web-api-1/send-post-request) — will originate from the IP addresses listed in [Webhook IPs](/developer/webhook-ips). ## Jira Server Integration If you are using the [Jira Server](/integrations/jira-server) integration, you will also need to add the address records of `app.pagerduty.com` or `app.eu.pagerduty.com` to any safelist that controls network egress traffic, depending on your account's service region. This integration makes API calls to PagerDuty that go directly to the hostname of your account's service region. --- URL: https://docs.pagerduty.com/account-admin/safelist-ips/ip-allow-list-for-user-sessions # IP Allow List for User Sessions Restrict PagerDuty sign-in access to an approved set of IP addresses and network ranges IP Allow List for User Sessions lets account administrators restrict sign-in access to their PagerDuty account to an approved set of IP addresses and network ranges (IPv4) — for example, a corporate VPN or office network. Once an allow list is enabled, any browser or mobile app access request from an address not on the list is blocked. Security and IT administrators at security-conscious and compliance-driven organizations use IP Allow List for User Sessions to: - Require all PagerDuty web app and mobile app access to come through the corporate VPN. - Close the gap where high-privilege accounts can log in with a username and password from any network, bypassing the network controls enforced by single sign-on. - Meet internal security policies and compliance requirements for network-layer access control, with an audit trail of every configuration change. You configure and manage the allow list entirely through the PagerDuty REST API. There is no web app interface for it at this time. The [IP Allow Lists API reference](/developer/api/reference/rest/ip-allow-lists/create-ip-allow-list) is the source of truth for how to create, retrieve, update, and delete an allow list, including all paths, parameters, and validation rules. > **Scope of Enforcement:** The IP allow list applies only to user sessions — logins to the PagerDuty web app and mobile app. It does not restrict REST API calls, Events API traffic, webhooks, or integrations. ## User Permissions The authentication and authorization requirements for managing an allow list are documented in the [IP Allow Lists API reference](/developer/api/reference/rest/ip-allow-lists/create-ip-allow-list). Enforcement is account-wide. Once an allow list is enabled, it applies to every user on the account regardless of role, including Account Owners. ## Create an IP Allow List An account has at most one IP allow list, containing up to 100 entries by default. To raise that limit, [contact PagerDuty Support](https://www.pagerduty.com/contact-us/#contact-support). Each entry is a single IPv4 address or a CIDR range, and each entry can carry a description. Use descriptions to record what each entry covers, for example "Toronto office" or "Corporate VPN egress". Create and retrieve the allow list using the operations in the [IP Allow Lists API reference](/developer/api/reference/rest/ip-allow-lists/create-ip-allow-list). > **Recommended Rollout:** Create the allow list in the disabled state, add and verify every entry — including the networks your administrators log in from — and enable it only after that. Before you enable the allow list, confirm your own current public IP address is covered by an entry. ## Update an IP Allow List Use the update operation in the [IP Allow Lists API reference](/developer/api/reference/rest/ip-allow-lists/update-ip-allow-list) to change the allow list's entries or its enabled state. The API enforces validation guardrails that protect you from creating an unusable configuration. The reference documents those rules. ## Disable or Delete an IP Allow List Disabling and deleting an allow list are separate operations with different outcomes: - **Disable** — enforcement stops immediately, and the allow list and all of its entries are kept. Use this to pause enforcement — during an office network change, for example — without losing your configuration. You can enable the allow list again at any time. - **Delete** — the allow list and all of its entries are permanently deleted, and enforcement stops. To use the feature again you must create a new allow list from scratch. > **Deletion Cannot Be Undone:** Deleting an allow list permanently deletes all of its entries. If you only want to stop enforcement temporarily, disable the allow list instead. Perform both operations using the [IP Allow Lists API reference](/developer/api/reference/rest/ip-allow-lists/delete-ip-allow-list). Deletion is recorded in the [audit trail](#audit-trail). ## Core Concepts ### What the Allow List Enforces When an allow list is enabled, requests to the PagerDuty web app and mobile app from an IP address that does not match any entry are rejected. A blocked person can still reach the sign-in screen at identity.pagerduty.com, but cannot access the web app or mobile app afterward. The following are not affected by the allow list: - REST API requests - Events API traffic - Webhooks and integrations ### What Blocked Access Looks Like Anyone connecting from an IP address that is not on the allow list receives a generic `403 Forbidden` response: - **Web browser**: a generic page reading "You don't have permission to access this resource." - **Mobile app**: a generic error that may appear as a session-expiration prompt — re-logging in will not resolve an IP block. The response deliberately does not mention the IP allow list. Naming the allow list would disclose the account's security configuration to an unauthenticated caller, so the response stays generic. The practical consequence is that a blocked person cannot diagnose the problem from the error message. Tell everyone on your account which networks are approved. You can also [contact PagerDuty Support](https://www.pagerduty.com/contact-us/#contact-support) to confirm whether a specific person is being blocked, and from which IP address. ### Avoiding Lockout If an allow list does not cover an administrator's own IP address, that administrator loses web app and mobile app access along with everyone else on the account. Because the allow list does not apply to the REST API, a REST API key can always be used to update the allow list — to add the missing IP address, or to disable the allow list — and restore access, even when every administrator is blocked from the web app. Treat a REST API key as your recovery path: - Create a REST API key and store it securely before you enable an allow list. If your only API key is lost or deleted while every administrator is blocked, you cannot recover access on your own. - Verify that your administrators' networks — office and VPN — are covered by an entry before you enable the allow list. The API's validation guardrails prevent some lockout mistakes, but they cannot prevent all of them. Entering the wrong CIDR range for your own network, for example, still locks you out of the web app and mobile app — though you can recover on your own with a REST API key, as described next. > **Full Lockout Recovery:** If you have no working REST API key and every administrator is blocked, [contact PagerDuty Support](https://www.pagerduty.com/contact-us/#contact-support). Support verifies the identity and authorization of the person making the request before modifying an allow list on an account's behalf, so this path is slower than recovering on your own with an API key. ### Audit Trail Every allow list change — creation, update, and deletion — is recorded in the PagerDuty [Audit Trail](/incident-management/analytics/audit-trail), including who made the change, how it was made, and what changed, such as state changes and entries added or deleted. Retrieve them account-wide using [List Audit Records](/developer/api/reference/rest/audit/list-audit-records) with the `root_resource_types[]=ip_allow_lists` filter, or for a single allow list using the [list-audit-records operation](/developer/api/reference/rest/ip-allow-lists/list-ip-allow-list-audit-records) in the IP Allow Lists section of the API reference. ## FAQ **Why does the error not mention the IP allow list?** The generic `403 Forbidden` response is intentional. A specific message would reveal the account's security configuration to an unauthenticated caller. Administrators need to tell everyone on the account which networks are approved, and can confirm specific blocks with [PagerDuty Support](https://www.pagerduty.com/contact-us/#contact-support). **Will enabling an allow list break my integrations or monitoring tools?** No. The allow list applies only to web app and mobile app user sessions. REST API requests, Events API traffic, webhooks, and integrations are unaffected. **I am locked out of the web app. How do I recover?** Use a REST API key to update or disable the allow list. REST API access is never blocked by this feature. If no working API key exists and every administrator is blocked, [contact PagerDuty Support](https://www.pagerduty.com/contact-us/#contact-support), who will verify your identity and authorization before making changes on your behalf. **Can I pause enforcement without losing my entries?** Yes. Disable the allow list. Your entries are kept and you can enable the allow list again at any time. Only deleting the allow list permanently deletes the entries. **Is IPv6 supported?** No. Entries are IPv4 addresses and CIDR ranges only. **Can I add more than 100 entries?** The default limit is 100 entries per account and can be raised on request. [Contact PagerDuty Support](https://www.pagerduty.com/contact-us/#contact-support) to raise the limit. --- URL: https://docs.pagerduty.com/account-admin/security-hygiene-for-the-current-cyber-threat-landscape # Security Hygiene for the Current Cyber Threat Landscape Recommended practices for securing API keys, enforcing strong passwords, and using modern TLS versions to protect your account. Protecting your PagerDuty account requires securing your API keys, enforcing strong password policies, and using up-to-date transport protocols. This article covers the recommended steps for each area. --- ## Secure Your API Keys - Store API keys using a secrets management tool. Do not embed keys in source code or shared files. - Do not store API keys in your application's source control tree. Take extra care with public source control systems such as GitHub, and do not copy keys to public sites such as pastebin. - Rotate API keys periodically. ### Rotate an API Key 1. Generate a new key from the administrative account. 2. Update the new key in your applications and integrations. 3. Remove the old key after all integrations have been updated. > **API Access Keys:** For instructions on generating and managing API keys, see [API Access Keys](/account-admin/api-access-keys). --- ## Use Strong Passwords - Use unique, secure passwords on all accounts. - Use a password manager to store passwords securely. - If your plan supports it, configure SSO on your account. See [Single Sign-On](/account-admin/sso). --- ## Use TLS 1.2 or 1.3 - Use TLS 1.2 or TLS 1.3 as your primary transport protocols. These versions provide modern authenticated encryption. > **Older TLS Versions:** TLS 1.1 and earlier have publicly disclosed protocol vulnerabilities. Do not use these versions. --- URL: https://docs.pagerduty.com/account-admin/security-privacy-and-compliance # Security, Privacy, and Compliance Where to find PagerDuty's SOC 2 certifications, audit reports, and security overview documentation for customer compliance reviews. For certification details, audit reports, and current documentation, visit the [PagerDuty Assurance Portal](http://assurance.pagerduty.com). For security details, refer to PagerDuty's [Security Overview page](https://www.pagerduty.com/security/). --- URL: https://docs.pagerduty.com/account-admin/sisense-compromise # Sisense Compromise FAQ on PagerDuty's use of Sisense, the vendor's 2024 data compromise, the credential resets taken in response, and third-party risk. PagerDuty was made aware in April 2024 of a data compromise that occurred at one of our vendors, Sisense. We take the security and integrity of your data seriously. PagerDuty is actively monitoring the situation and working to take appropriate measures to mitigate any potential risks to your organization, even while our vendor is still investigating the specifics of the incident. Below is an initial update on actions taken based on the information known to PagerDuty at this time. ## FAQ **Does PagerDuty use Sisense?** Yes, PagerDuty does use Sisense. **Has PagerDuty detected or experienced any unauthorized activity due to the breach?** At this time, we are not aware of any impact on PagerDuty or its customers. **What steps has PagerDuty taken to address this potential exposure** Per guidance from the Cybersecurity and Infrastructure Security Agency (CISA) and Sisense recommendations for mitigating potential effects of this incident, we have reset credentials and secrets potentially exposed to, or used to access Sisense services. **Does PagerDuty use any third parties in the provision of services to PD Customers?** Yes, see the list of third parties included in PagerDuty’s SOC2 Type II. **Has PagerDuty reached out to these third parties (4th parties to PagerDuty customers) to understand whether they have experienced any impact?** Yes, we have either already reached out, or are in the process of reaching out, to our mission-critical third parties, and will take appropriate steps based on their responses. At this time, we recommend that you remain vigilant and take any precautions you deem necessary to safeguard your data and systems. We are in close communication with our vendor and will provide you with further updates as additional relevant information becomes available. If you have any questions or concerns, please contact us at [SecurityComplianceGRC@PagerDuty.com](mailto:SecurityComplianceGRC@PagerDuty.com.). We are here to support you and address any issues that may arise. --- URL: https://docs.pagerduty.com/account-admin/sso # Single Sign-On (SSO) Streamline user authentication and access management PagerDuty can be configured with Single Sign-On (SSO) to external identity providers (IdPs) such as Microsoft Active Directory (using ADFS), Bitium, OneLogin, Okta, Ping Identity, SecureAuth, and others using the SAML 2.0 protocol. Alternatively, you can configure your account to use Google authentication with the OAuth 2.0 protocol (with individual consent). Accessing private status pages is handled via the OpenID Connect (OIDC) protocol. SSO comes with the following benefits: - **One-Click Corporate Login**: This eliminates the need for a separate PagerDuty username and password. - **On-Demand Provisioning**: PagerDuty accounts are created on-demand once access is granted via the SSO provider. - **Revoke Access**: When an employee leaves your company, administrators can quickly remove PagerDuty access within the SSO provider. > **Availability:** Single Sign-On is available on the following pricing plans: Professional, Business, Enterprise for Incident Management, and Digital Operations (Legacy). Contact our [Sales team](https://www.pagerduty.com/contact-us/#contact-sales) to upgrade to a plan with Single Sign-On. > **Required Permissions:** The Account Owner is the only role that can configure Single Sign-On settings. ## Configure Identity Provider Single Sign-On (SAML) To configure SAML SSO: 1. Navigate to our [Integrations Directory](/integrations) and select your identity provider’s integration guide. 2. In the PagerDuty web app, navigate to **User Icon** → **Account Settings** → **Single Sign-On**. 3. Select **SAML** and continue following the steps in the integration guide. - Note: Not all identity providers require this step. Refer to the integration guide for specific instructions. 4. Configure the following settings based on your preferences and your integration guide’s instructions: | Field | Value | | :-------------------------------------------------- | :--------------------------------------------------------- | | **Allow username/password login** | Select this option to allow standard login. | | **Require EXACT authentication context comparison** | Select this option based on your requirements. | | **Require signed authentication requests** | Select this option based on your requirements. | | **Auto-provision users on first login** | Optional: Select this to provision accounts automatically. | | **Redirect non-provisioned users** | Optional: Select this to redirect unauthorized logins. | 5. Click **Save Changes**. ### Custom SAML Configuration For custom SAML configurations, use the following metadata URL: `https://{subdomain}.pagerduty.com/sso/saml/metadata` #### Required Attributes For manual SAML configurations, PagerDuty validates and enforces the following attributes in the SAML payload: 1. Destination (sometimes labeled **SAML Recipient** in identity provider configuration forms) must be: `https://{subdomain}.pagerduty.com/sso/saml/consume` 2. Audiences (sometimes labeled **SAML Audience** in identity provider configuration forms) must be: `https://{subdomain}.pagerduty.com` > **Trailing Slashes:** Do not include a trailing slash at the end of the URL. You receive an `HTTP 400` error when trying to log in if there is a `/` at the end of the URL. 3. **Name ID** must be the email address: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress` #### Optional Attributes for Auto-Provisioning If you enable the **Auto-provision users on first login** option, keep the following in mind: - **Name**: Names map to the value of the `Name` or `name` attribute received in your SAML payload. If there is no `Name` or `name` attribute in your SAML payload, the name defaults to the email address. - **Role**: Roles map to the value of the `Role` or `role` attribute received, where the value must match one of our [REST API role values](/account-admin/advanced-permissions#roles-in-the-rest-api-and-saml): `admin`, `limited_user`, `user`, or `read_only_user` (known as Stakeholder). Accounts with [Advanced Permissions](/account-admin/advanced-permissions) can also use the `observer` role. If there is no `Role` or `role` attribute in your SAML payload, the role defaults to `user`. This role links to the **User** basic role and **Manager** advanced permission role. - **Job title**: The job title maps to the `jobresponsibilities` attribute in the SAML payload, if present. > **Attributes:** These attributes only apply when an account is initially created. Changing an email address, name, or role in your identity provider does not change these values in PagerDuty. You must update a login email address, name, or role in PagerDuty if you change them in your identity provider after the account is automatically provisioned in PagerDuty. ## Configure Google Authentication (OAuth 2.0) To configure Google Authentication: 1. In the PagerDuty web app, navigate to **User Icon** → **Account Settings** → **Single Sign-On**. 2. Select **Google**. 3. Configure the following information: | Field | Value | | :-------------------------------------- | :---------------------------------------------------------------- | | **Google Domain** | Enter the domain associated with your Google Apps account. | | **Allow username/password login** | Optional: Select this option to allow standard login. | | **Auto-provision users on first login** | Optional: Select this option to provision accounts automatically. | 4. Click **Save Changes**. When you [Log In to PagerDuty](/get-started/log-in-to-pagerduty#log-in-with-sso), you are prompted to log in via Google Authentication. > **Revoke Access:** Revoking access in your SSO provider prevents you from logging in via SSO, but it does not delete the account in PagerDuty. You must still log in to the PagerDuty web app to remove responders from schedules, escalation policies, and delete their account. Read [Offboarding](/account-admin/manage-users/offboarding) for more information about removing accounts in PagerDuty. > **Google Workspace Multiple Domains Limitation:** The PagerDuty Google Auth integration supports a single domain and cannot be used for multiple Google Workspaces. ## Configure Open ID Connect (OIDC) You can access private status pages via SSO using the OpenID Connect protocol. Read [Private Status Pages](/incident-management/communicate/external-status-page/private-status-page) for more information. ## Log In via SSO Read [Log In to PagerDuty](/get-started/log-in-to-pagerduty#log-in-with-sso) for more information about logging in to PagerDuty via SSO. ## Redirect Non-Provisioned Accounts Auto-provisioning accounts gets responders up and running quickly, but it affects your account’s billing. If you do not want to auto-provision accounts, you can optionally redirect non-provisioned individuals to a destination link, such as an internal wiki, for more information about getting provisioned in your identity provider. To redirect non-provisioned individuals to a destination link: 1. In the PagerDuty web app, navigate to **User Icon** → **Account Settings** → **Single Sign-On**. 2. Under the **User Provisioning** section, select **Redirect non-provisioned users**. 3. Enter the **Destination Link** where they should be redirected. 4. Click **Save Changes**. ![Redirect non-provisioned users](/images/kb/3ed8ea40d2ea2a9551c38e2266704b7c5862b02fb6eb208dc654c659482df8cc-single-sign-on-redirect-non-provisioned-users.webp) *Redirect non-provisioned users* ## FAQ **Does the application support Service Provider (SP)-initiated or Identity Provider (IdP)-initiated SSO?** Yes. PagerDuty supports both Service Provider (SP) and Identity Provider (IdP) initiated SSO. **How do I know if my identity provider is "pinning" certificates?** PagerDuty rotates its SAML certificate every year, and PagerDuty sends out communications with instructions about how to rotate the certificate. If your identity provider uses a static copy of PagerDuty's SAML certificate (that is, certificate pinning), you must update your identity provider every time PagerDuty rotates its certificate. If certificates are manually uploaded or configured rather than pulled from PagerDuty's metadata endpoint, you are likely pinning certificates. Check with your identity provider administrator to confirm. No action is needed if your identity provider uses PagerDuty's SAML metadata endpoint (that is, `https://{subdomain}.pagerduty.com/sso/saml/metadata`) to configure certificates dynamically. If you can log in via SSO without errors after certificate rotation dates, you are likely using dynamic configuration and no action is needed. **Why do I get an HTTP 400 error with SSO to Entra?** If you encounter an HTTP 400 error when signing in via SSO, contact [PagerDuty Support](https://www.pagerduty.com/contact-us/#contact-support) and include the following details in your support request: **Point of failure**: Specify exactly when the error occurs — for example, during sign-in, sign-out, or when redirecting from your identity provider portal — and whether it happens on a web browser or the mobile app. **Screenshot**: A screenshot of the full screen showing the error message, if possible. **Timestamp**: The exact date, time, and timezone of the most recent occurrence. > **Getting an AADSTS75011 Error?:** If your error includes the code **AADSTS75011**, that is a different issue with a specific fix — see [Why do I get authentication errors with Microsoft (Entra) SSO?](#why-do-i-get-authentication-errors-with-microsoft-entra-sso) instead. **Why do I get authentication errors (AADSTS75011) with Microsoft Entra SSO?** You might encounter an authentication error AADSTS75011 when using some authentication methods, such as MFA, passwordless, and certificates. The full error is `Authentication method by which the user authenticated with the service doesn't match requested authentication method`. If you receive this error, contact our [Support Team](https://www.pagerduty.com/contact-us/#contact-support), who can enable authentication context bypass for your account. This allows your identity provider to handle authentication requirements directly. If you contact support: - The PagerDuty Account Owner must submit or explicitly authorize the request. - Ask to enable the "**SAML authentication context bypass**" for your account. - Let Support know if you need this setting to be enabled immediately, or schedule the change for a certain date and time. **What should I do if role assignment is not working?** If you notice that role assignment is not working as expected, or that accounts are created with a Stakeholder role instead of the intended role defined in the SAML payload, the following issues might be the cause: - Insufficient licenses available on your account - Incorrect role attribute values in the SAML payload - The role attribute was not properly configured in your identity provider Confirm that your account has [licenses available](/account-admin/manage-users#user-license-limits) and verify that role attribute values match PagerDuty's expected values exactly. Read our developer documentation article [Create a user](/developer/api/reference/rest/users/create-user) for more information about valid role names. **Why do I see an error `An unexpected error occurred. Please try again.` after entering my X.509 cert?** If you see an error `An unexpected error occurred. Please try again.` after entering your X.509 cert, check the following: 1. Confirm that the X.509 certificate is valid. 2. Confirm that each row in your X.509 certificate is a maximum of 64 characters. 3. Confirm that `-----BEGIN CERTIFICATE-----` is at the beginning of the certificate and `-----END CERTIFICATE-----` is at the end. **Example**: ```text -----BEGIN CERTIFICATE----- MIIDdjCCAl6gAwIBAgIURghXgSldiQTb3HEFXKz/MAoxnWwwDQYJKoZIhvcNAQEL BQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM DVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDEV4YW1wbGUgQ29ycDEUMBIGA1UEAwwL ZXhhbXBsZS5jb20wHhcNMjUwNjIzMTYzNjUyWhcNMjYwNjIzMTYzNjUyWjBnMQsw CQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZy YW5jaXNjbzEVMBMGA1UECgwMRXhhbXBsZSBDb3JwMRQwEgYDVQQDDAtleGFtcGxl LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAInvxB/KIvOpdxeG yuEP9glNNyjZjj2qnrjimShHmUCgP0FvdZtjIzQcHsV375+K17QJQygiKQrW/L1r aDvGmRkZsOOuuC7voiQ8sCb9oQ2YuQiRXZIFZhOEPI4N06sh4SHKShyhsXFdegZJ S6BHYtO9gYEog9ILq2RH7gqcUBSG4aBiVw3EpN5kspnTBi30MX0g78T/ETSvn9j9 0y8kqaDghXNH+3SqArcN5P15K3NVW7A5lSWroMtcWv/7caycTh8JX4Plxy4laTnb aG2uvrsUKMIf6nGDfeIso7i2XcrXTAB0EF5o4uIKVPB6I1vBtF0c/OEzx/o2T6xU wepgdVsCAwEAAaMaMBgwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wDQYJKoZIhvcN AQELBQADggEBAELrui2b3tVUq+NmK3C7xYEw0Hiqo0B1x8ijcvSHSHpiLOxOtcVl ZMSScW7Xtqu21erw/LEQOI48CHnIw6JSS8XnsKQUoLT8NLcc2EkxkYWlIwBWmaN+ p8YaE+wy49JfdlaYI+3X9utCGrAoFJ/mMNX/ONKXdxV9SxlRxTnrvymHQb2S23uM 4uophIWmb8Gz1kaGBA/lxjVzKHPaFas7JRHVQG7TF/pyxKNmfsz205a+/6bxQ8QP w3UsE2bPUXSiAVHygZE1Kgn7vLhkQY7G00NJaFpDgzNESRawWYBoDBSLWNgXHUvv biTMqQD2QXqngpt4OjA9c7eLuiMd5wDNVT4= -----END CERTIFICATE----- ``` **Can I use a self-signed certificate for my SAML SSO integration?** Yes. PagerDuty treats signatures from the identity provider as valid as long as: - The certificate stored in the PagerDuty SAML settings matches the private key that the identity provider uses to sign SAML responses. - The identity provider is configured to sign assertions. Once these conditions are met, you can authenticate. **Why does the Account Owner have the ability to log in using email and password after enabling SSO?** Account Owners retain the ability to log in by email address and password in the event that there is an issue with the SSO provider. This cannot be turned off. **What happens if my identity provider has an outage?** If your identity provider has an outage and you cannot log in via SSO, the Account Owner can [log in using their email and password](/get-started/log-in-to-pagerduty#log-in-via-the-web-or-mobile-app) and temporarily enable email/password login for everyone. 1. In the PagerDuty web app, navigate to **User Icon** → **Account Settings**. 2. Select the **Single Sign-On** tab. 3. In the section **Allow username/password login**, select this option. 4. Click **Save Changes**. > **Note:** Remember to turn this setting off again after your identity provider restores service. **I am locked out and cannot log in. What do I do?** PagerDuty authenticates through the identity provider (IdP) your organization configured for Single Sign-On. PagerDuty Support cannot restore access directly, because your organization's Account Owner or identity provider administrator controls the SSO configuration and login state for your account. Contact your organization's Account Owner. The Account Owner can log in with email and password even when SSO is enabled, and can temporarily enable email/password login for all users if needed. If you do not know who your Account Owner is, contact your internal IT team, since IdP configuration is typically managed jointly by IT and the Account Owner. **Can one PagerDuty account have multiple SSO/SAML providers?** Not at this time. Currently only one SSO option is configurable. > **Security Recommendation:** If configuring an on-premises identity provider, you must treat its private key with utmost secrecy and take appropriate security precautions. **When switching from password login to SSO, am I logged out from my account?** Enabling SSO on the account, and then disabling the option to **Allow username/password login**, does not also log you out of the web app or mobile app. You can use the REST API to end sessions, which requires you to log in again using SSO. Note you must use a different endpoint for the web app and the mobile app: - **Web app**: [Delete all user sessions](/developer/api/reference/rest/users/delete-user-sessions) - **Mobile app**: [Delete all OAuth delegations](/developer/api/reference/rest/users/delete-user-sessions). Requests might take up to 24 hours to process. **Can I use Shibboleth for SSO?** Yes. [Shibboleth](https://www.shibboleth.net/about-us/the-shibboleth-project/) is an open-source identity management system, which might require a custom metadata file. Its contents should look similar to the following. Be sure to replace `subdomain` with your own PagerDuty subdomain (for example, `https://subdomain.pagerduty.com`). In addition to defining the metadata, you must configure `RelyingParty` in Shibboleth, as in the example below. Be sure to replace the `provider` URL with your own. ```xml ``` --- URL: https://docs.pagerduty.com/account-admin/sso/microsoft-entra # Microsoft Entra ID Sync and manage PagerDuty users with Entra ID using SCIM user provisioning ## Configure the SCIM Integration 1. In Microsoft Entra, follow the instructions in [Microsoft’s documentation](https://learn.microsoft.com/en-us/entra/identity/app-provisioning/use-scim-to-provision-users-and-groups#getting-started) to configure a new Microsoft Entra SCIM integration. Create your SCIM app with any name, according to your preferences. Ensure that you select **Integrate any other application you don’t find in the gallery**. > **Disregard Suggested Apps:** You may see suggested apps pop up when typing in the name of your application (e.g., the PagerDuty app). Please disregard these suggested apps. 2. Create a new provisioning configuration by entering the following: 1. **Provisioning Mode**: `Automatic` 2. **Tenant URL**: `https://api.pagerduty.com/scim/v2` 3. **API Token**: `token=` 3. Test the connection to ensure that it works, then click **Save**. 4. Ensure that you’ve only enabled user provisioning/mapping. We do not currently support provisioning groups, so you should disable group attribute mapping. ## Configure Provisioning for Entra ID Users 1. Perform the following to [update the user attribute mapping](https://learn.microsoft.com/en-us/entra/identity/app-provisioning/customize-application-attributes#editing-user-attribute-mappings): 1. **Enabled**: Select **Yes**. 2. **Target Object Actions**: Check the **Create**, **Update** and **Delete** checkboxes. 3. **Attribute Mappings**: Define your attribute mappings: 1. **Important**: The `userName` mapping should match the email your users use in PagerDuty to ensure that Microsoft Entra and PagerDuty users get linked correctly. 2. Ensure the `active` attribute mapping has the expression `Switch([IsSoftDeleted], "true", "False", "true", "True", "false")`. Copy this **exactly**, as it is case-sensitive. 3. If you’re setting any of the following optional fields via SCIM, [edit the attribute list](https://learn.microsoft.com/en-us/entra/identity/app-provisioning/customize-application-attributes#editing-the-list-of-supported-attributes) to include the desired attributes: 1. **PagerDuty role creates an attribute mapping**: `roles[primary eq "True"].value` 2. **PagerDuty license creates an attribute mapping**: `urn:ietf:params:scim:schemas:core:2.0:User:entitlements[type eq "license"].value` 3. **Time zone creates an attribute mapping**: `timezone` > **Note:** Remove unused fields in your Attribute Mapping list. Provisioning may fail if you have unnecessary fields. ![Attribute mapping in Microsoft Entra](/images/kb/32cee17164a121c84ecb90d667487a62fef4373478cccc00620838e0ea84c776-attribute_mapping.png) *Attribute Mapping in Entra ID* ## Map Roles > **Note:** The following instructions for assigning roles are for guidance only and should be adapted to your organization’s needs. Please only use one of the options provided when configuring roles. ### (Option 1) Configure Group-Based Role Mapping #### Step 1: Add PagerDuty Roles By default, new users will be provisioned with the “Manager” role (or your PagerDuty default role). 1. From the **Entra Home Screen**, go to **Manage Entra Microsoft Entra ID**, then click **View** 2. Under **Manage** on the sidebar, go to **App registrations** and select your application. 3. Click **App roles** 4. Create a [PagerDuty role](/account-admin/advanced-permissions#roles-in-the-rest-api-and-saml): 1. Fill in the **Display name**, **Value**, and **Description**. The **Display name** and **Value** should match. 2. Ensure **Allowed member types** is set to **Users/Groups**. 3. Select **Do you want to enable this app role?** 4. Click **Apply**. 5. Repeat for remaining roles. ![Entra ID app role form with Display name and Value text inputs](/images/kb/bf4325393462785443c8bb8c92a2f52e3c91262e7beadf40eda831008275ab7a-app_roles.png) *Display name and Value Fields in Entra ID* > **Tip:** Reference our [Knowledge Base](/account-admin/advanced-permissions#roles-in-the-rest-api-and-saml) to see how these values map to PagerDuty Role Names, > e.g. `Global Admin` -> `admin` #### Step 2: Configure Role Mapping 1. From the Attribute mapping screen for your SCIM Enterprise application, click **+ Add new mapping**. 2. Fill in the configuration details as follows: 1. Mapping type: `Expression` 2. Expression: `SingleAppRoleAssignment([appRoleAssignments])` 3. Target attribute: `roles[primary eq "True"].value` 3. Click **Save**. #### Step 3: Assign the Configured Roles to Users/Groups 1. From the **Entra Home Screen**, go to **Manage Entra Microsoft Entra ID **and select **View**. 2. On the sidebar, click **Manage** > **Enterprise Applications**. 3. Select your application. 4. On the sidebar under **Manage**, click **User and groups**. 5. Click **Add user/group**. 6. Assign the correct PagerDuty roles to your users/groups. 1. Under **Users and groups**, select all the users and groups that should have a specific role and click **Select**. 2. Under **Select a role **, select a PagerDuty role that you previously configured for the selected users/groups. 3. Click **Assign**. ### (Option 2) Configure Group-Based License and Role Mapping Alternatively, if you don't want PagerDuty's default license assignment and prefer to manually allocate licenses, you can use this option to configure users via app roles that correspond to specific PagerDuty role and license combinations. #### Step 1: Create App roles 1. From the **Entra Home Screen**, go to **Manage Entra Microsoft Entra ID**, then click **View**. 2. Under **Manage** on the sidebar, go to **App registrations** and select your application. 3. Click **App roles**. 4. Create a unique role in the **Display name**. In this example we will use: `PagerDuty Admins (Enterprise Incident Management Full User)`. 5. Repeat for remaining roles. For this example, we will also create the role: `PagerDuty Stakeholders (Enterprise Incident Management Stakeholder)`. #### Step 2: Map the PagerDuty Licenses to role names Configure the attributes mappings for `urn:ietf:params:scim:schemas:core:2.0:User:entitlements[type eq "license"].value`with: ``` Switch( SingleAppRoleAssignment([appRoleAssignments]), "" "PagerDuty Admins (Enterprise Incident Management Full User)", "", "PagerDuty Stakeholders (Enterprise Incident Management Stakeholder)", "" ) ``` > **Tip:** Use the [List Licenses API](/developer/api/reference/rest/licenses/list-licenses) to list the licenses associated with your account. #### Step 3: Map the App Roles to the Role Values Configure the attribute mappings for `roles[primary eq "True"].value`with: ``` Switch( SingleAppRoleAssignment([appRoleAssignments]), "" "PagerDuty Admins (Enterprise Incident Management Full User)", "admin", "PagerDuty Stakeholders (Enterprise Incident Management Stakeholder)", "read_only_user" ) ``` #### Step 4: Assign the Configured Roles to Users/Groups Choose the corresponding app role that represents the role and license you want those users/groups to be provisioned with. 1. From the **Entra Home Screen**, go to **Manage Entra Microsoft Entra ID **and select **View**. 2. On the sidebar, click **Manage** > **Enterprise Applications**. 3. Select your application. 4. On the sidebar under **Manage**, click **User and groups**. 5. Click **Add user/group**. 6. Assign the configured app role that corresponds to the desired role/license combo to your users/groups. 1. Under **Users and groups**, select all the users and groups that should have a specific role and click **Select**. 2. Under **Select a role **, select the app role that you previously configured for the selected users/groups. 3. Click **Assign**. --- URL: https://docs.pagerduty.com/account-admin/sso/okta # Okta Sync and manage PagerDuty users with Okta using SCIM user provisioning ## Configure the SCIM Integration in Okta 1. In Okta, add the [SCIM 2.0 Test App (Header Auth)](https://www.okta.com/integrations/scim-2-0-test-app-header-auth/) integration. 2. In the **Provisioning** tab, [configure the connection to PagerDuty’s API](https://help.okta.com/en-us/content/topics/provisioning/lcm/lcm-provision-application.htm) by entering the following: 1. **Base URL**: `https://api.pagerduty.com/scim/v2` 2. **API Token**: `Token token=` 3. Click **Test API Credentials** and ensure you get a successful response. 4. Click **Save**. ## Configure Provisioning 1. Ensure that [you’ve enabled](https://help.okta.com/en-us/content/topics/provisioning/lcm/lcm-provision-application.htm#:~:text=updates%20now.-,Configuration%20settings%20for%20To%20App%20provisioning,-This%20page%20contains) the **Create Users**, **Update User Attributes**, and **Deactivate Users** checkboxes. 2. Finally, configure any required mappings for the user. When creating attribute mappings use `urn:ietf:params:scim:schemas:core:2.0:User` for the external namespace: 1. To create an attribute mapping for `roles`, use Okta’s instructions to [create an attribute](https://support.okta.com/help/s/article/How-to-Pass-Multivalued-Attributes-in-SCIM-User-Object?language=en_US): `roles.^[type=='base'].value` 2. To create an attribute mapping for `entitlements`, use Okta’s instructions to [create an attribute](https://support.okta.com/help/s/article/How-to-Pass-Multivalued-Attributes-in-SCIM-User-Object?language=en_US): `entitlements.^[type=='license'].value` --- URL: https://docs.pagerduty.com/account-admin/sso/onelogin # OneLogin Sync and manage PagerDuty users with OneLogin using SCIM user provisioning ## Configure the SCIM Integration in OneLogin 1. In OneLogin, navigate to **Applications** → **Add App** [to create an app](https://developers.onelogin.com/scim/create-app). 2. Search and select **SCIM Provisioner with SAML (SCIM v2 Core)**. 3. Enter a Display Name value for your SCIM test app that will help you recognize it. 4. Click **Save**. 5. Select the **Configuration** tab and enter the following: 1. **SCIM Base URL**: `https://api.pagerduty.com/scim/v2` 2. **SCIM Bearer Token**: `token=` 3. **SCIM JSON Template**: ```json { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "userName": "{$parameters.scimusername}", "displayName": "{$user.display_name}", "externalId": "{$parameters.externalId}", // Optional "active": "{$user.status}", // Optional "title": "{$parameters.title}", // Optional "roles": [{"type": "base", "value": "{$parameters.role}"}], // Optional "timezone": "{$parameters.timezone}", //Optional "entitlements": [{"type": "base", "value": "{$parameters.license}"}], // Optional } ``` > **Note:** The `"roles"`, `"timezone"` and `"entitlements"` mappings don't have basic mappings on the User object in OneLogin. You can achieve these mappings via custom User roles. You can find more explanation of this further down with the PagerDuty Role example. The process is creating a custom user role for the mapping, then creating a parameter in the SCIM application that maps the custom User attribute to the parameter used in this schema: `"role", "license", "timezone"`. 6. Click **Save**. ## Configure Provisioning 1. In the **Provisioning** tab under **Applications**, select the **Enable provisioning** option for the [SCIM Provisioner with SAML](https://developers.onelogin.com/scim/test-your-scim). 2. You can use [Custom User Fields](https://onelogin.service-now.com/support?id=kb_article&sys_id=653d60e6973b2150c90c3b0e6253afd2) along with parameter mappings to set the PagerDuty Role via `role`, the license via `entitlements` and the time zone via `timezone` in the schema in the previous step. --- URL: https://docs.pagerduty.com/account-admin/support-portal-faq # Support Portal FAQ Learn how to create an account, view tickets, contact support, and more in the PagerDuty Support Portal FAQ. > **Availability:** The Support Portal is only available for customers on a paid plan. PagerDuty uses Salesforce's Service Cloud ticketing system to communicate with you. The following FAQs address common issues and concerns about the platform: **How do I create an account in the support portal?** To register: 1. Navigate to the [support portal](https://tickets.pagerduty.com/s/). 2. Click **Log in** in the top-right. 3. Click **Not a member?** 4. Read the prompt, gather your account's subdomain, and click **Next**. 5. Enter the following information: | Field | Value | | :------------------- | :------------------------ | | **First Name** | Enter your first name. | | **Last Name** | Enter your last name. | | **Email** | Enter your email address. | | **Subdomain** | Enter your subdomain. | | **Password** | Enter a password. | | **Confirm Password** | Re-enter your password. | 6. Click **Submit**. **Was my email request received?** Premium support emails and messages sent to [support@pagerduty.com](mailto:support@pagerduty.com) automatically route to the current system. **How can I view cases that I have submitted?** To view your submitted cases, [create an account in the support portal](#how-do-i-create-an-account-in-the-support-portal). After logging in, you can see your emails and comments in the **Messages** tab. **How can I contact Support via chat?** Chat is available to Premium Support accounts. You can access live chat by logging into the [support portal](https://tickets.pagerduty.com/s/). **How can I view a ticket that someone else at my organization submitted?** We are building the required permissions to allow Account Owner-designated individuals to view all of the support cases for your organization in the [support portal](https://tickets.pagerduty.com/s/). --- URL: https://docs.pagerduty.com/account-admin/tagging # Contextual Search - Tagging Add tags to teams, escalation policies and users to easily search for them Contextual Search uses tags to enable faster searches for objects such as [Teams](/account-admin/teams), [Escalation Policies](/incident-management/schedules/escalation-policies) and [Users](/account-admin/manage-users). Large organizations can use tags to add metadata to indirectly related objects and identify their relationships. Contextual Search also helps Responders and Managers navigate to the correct objects, and reassign incidents quickly and easily. > **Availability:** Contextual Search is available on the following pricing plans: Business, Digital Operations (legacy) and Enterprise for Incident Management. Please [contact our Sales Team](https://www.pagerduty.com/contact-us/#contact-sales/) if you would like to upgrade to a plan featuring Contextual Search. > **Required User Permissions:** Users with the following roles can **create** and **remove** tags by default: > > - Account Owner > - Admin/Global Admin > > Account Owners can optionally allow Team Managers to create tags by navigating to **User Icon** → **Account Settings** → **Tagging** tab and selecting **Team Managers can create new tags (in addition to Account Owner and Global Admins)**. > > Users with the following roles can **add** tags to objects: > > - Account Owner > - Admin/Global Admin > - Manager > - Users with a Manager [Team role](/account-admin/advanced-permissions#team-roles) can to add tags to their Team and its escalation policies, but not its users. ## Add Tags to a User, Team or Escalation Policy Tags are designed to be added to each object category (i.e., Teams, escalation policies and users) separately. For example, if you add a "Payments" tag to a Team, the tag will not appear on associated escalation policies or users. In this example, you would need to also add it to any associated escalation policies and users individually. > **Tag Formatting:** - Pressing the space bar ends the tag (like pressing Enter/Return). To separate words within a tag, use hyphens (-) or underscores (\_). > - There is a maximum of 191 characters per tag. > - You can use a combination of letters, numbers, and special characters. 1. From the menu, navigate to **People** and select **Users**, **Teams** or **Escalation Policies**, depending on which object you want to tag. Select your preferred object to view its details page. 2. To the right of the object's name, click **Add Tags**. 3. If you would like to create a new tag, input a name for the tag and press **Enter**. If you would like to add an existing tag to the object, search and/or select it from the dropdown. 1. Repeat this step to add multiple tags. 4. Click **Save**. ## Remove Tags from a User, Team or Escalation Policy Removing a tag is similar to the steps for [adding one](#add-tags-to-a-user-team-or-escalation-policy), but in reverse. 1. Navigate to **People**, select **Users**, **Teams** or **Escalation Policies**, depending on which object you would like to remove a tag from. Select the object to drill down to its details page. 2. To the right of the object's name, click . 3. Click on the tag you want to remove. 4. Click **Save**. ## Delete Tags The web app does not currently offer a way to completely delete a tag from your PagerDuty account. You can, however, use the REST API to do this. For more information, please see [Delete a tag](/developer/api/reference/rest/tags/delete-tag). ## Filter Objects by Tag Tags are particularly useful when you'd like to restrict search results to a specific set of objects. 1. Navigate to **People** and select **Users**, **Teams** or **Escalation Policies** depending on which object you would like to filter. 2. Next to the search bar, click the **Filter By Tags** dropdown and search for your tag, or browse the dropdown. ## Reassign an Incident Using Tags 1. On an incident's detail page, click **Reassign**. 2. In the **Reassigning incident to…** modal, enter the tag name or browse tags in the tag selector dropdown. 1. With a tag selected, only matching users, escalation policies and escalation levels will appear in the results. 3. Select your desired user, escalation policy or escalation level. 4. Click **Reassign**. --- URL: https://docs.pagerduty.com/account-admin/teams # Teams Create Teams to customize information presented to specific users The Teams feature allows you to group and control user access to associated PagerDuty objects, such as escalation policies, users, schedules, and services. This feature also allows for a customized view in the PagerDuty web app and mobile app that only displays information related to a user's Team. As an example, security engineers may only want to see users, incidents, schedules, and services associated with their Team. > **Availability:** Teams are available on the following pricing plans: Business, Digital Operations (Legacy), and Enterprise for Incident Management. These plans support an unlimited number of Teams. > > Customers on Professional plans can create up to two Teams. > > [Contact our Sales Team](mailto:sales@pagerduty.com) to upgrade to a plan featuring Teams, or to increase your Team limit. > **Required User Permissions:** - Manager, Global Admin, or Account Owner base roles can create, edit, and delete Teams. > - Global Admin or Account Owner roles can manage Primary Teams. > - Users with an Account Owner, Global Admin, or Manager base role can set a Team to public or private. > - Users with a Manager Team role can also set the Team's visibility to public or private. ## Create a Team > **Product Limits:** - You can add up to 100 unique escalation policies per Team. > - There is a limit of 500 users per Team. > - Users can be on multiple Teams, but escalation policies can only be associated with one Team. > - Users can be on up to 400 Teams. Creating [schedules](/incident-management/schedules/schedule-basics#create-a-schedule) and [escalation policies](/incident-management/schedules/escalation-policies#create-an-escalation-policy) before creating a Team is recommended. When you add an escalation policy to a Team, the escalation policy's users and schedules are automatically assigned to your Team. Read [Team Association Behavior](#team-association-behavior) for more information. 1. In the PagerDuty web app, go to **People** → **Teams** and click **New Team**. 2. Enter a **Name** for the Team and _optionally_ add **[Tags](/account-admin/tagging)**. 3. Click **Save** to continue. 4. You are directed to the Team's details page. Click **Edit Team** on the right. 5. Search and select the **Escalation Policies** or **Users** that you would like to add to this Team. > **Escalation Policy Association:** When you add an escalation policy to a Team, associated users, schedules, and services are automatically added to the Team, too. You may also _optionally_ add individual users to the Team if they are not on a selected escalation policy. 6. Click **Save**. ## Edit a Team 1. In the PagerDuty web app, navigate to **People** → **Teams**. 2. To the right of your desired Team, select → **Edit**. 3. Make your required edits to the Team's **Name**, **Escalation Policies**, **Users**, and/or **Tags** by searching and selecting them from their fields. To remove escalation policies, users, or tags, click to the left of the object. 4. Click **Save**. ### Edit Team Roles Read [Manage Users: Edit Team Roles](/account-admin/manage-users#edit-team-roles) for more information about editing users' Team roles. ### Manage Team Business Service Subscriptions See our section on [Subscribe Users and Teams to Business Services](/incident-management/services/business-services/subscription#subscribe-users-and-teams-to-business-services) for more information about managing Business Service subscriptions. ## Delete a Team 1. In the PagerDuty web app, navigate to **People** → **Teams**. 2. To the right of your desired Team, select → **Delete**. 3. A dialog appears that prompts you to **Edit Rulesets, Escalation Policies, Services and Schedules** and **Reassign Incidents** associated with the Team, with the option to reassign incidents to another Team via the dropdown. 4. Once you have performed these tasks, click **Delete Team**. > **Non-Reversible Action:** This is a non-reversible action and cannot be undone. ## Team Association Behavior Accounts with the [Advanced Permissions](/account-admin/advanced-permissions) feature can group PagerDuty objects (for example, users, schedules, services, and escalation policies) by associating them with a Team. When an escalation policy is added to a Team, the users, schedules, and services associated with that escalation policy are also added to the Team. PagerDuty also determines a user's access level to Team objects based on their [Team role](/account-admin/advanced-permissions#team-roles). For example, a user who has a Responder role on a Team also becomes a Responder on the Team's associated escalation policies, schedules, and services. To maintain consistent access to Team objects, keep the following in mind: - If you add a user to an escalation policy or schedule, PagerDuty automatically adds the user to any associated Teams. > **Schedule Override Permissions:** Users added to a schedule via an [override](/incident-management/schedules/edit-schedules#create-overrides) do not inherit the Team's permissions. - [Create a schedule](/developer/api/reference/rest/schedules/create-schedule) and [Update a schedule](/developer/api/reference/rest/schedules/update-schedule) API: - Adding users to a schedule via API adds the users to any associated Teams. - Associating a Team with a schedule via API adds the schedule's users to the Team. - [Create an escalation policy](/developer/api/reference/rest/escalation-policies/create-escalation-policy) and [Update an escalation policy](/developer/api/reference/rest/escalation-policies/update-escalation-policy) API: Adding a user to an escalation policy adds the user to any associated Teams. Users may not be removed from the Team if they are still on an escalation policy that is associated with the Team. ## Manage Primary Team > **Tip:** To set a user's primary Team, they must already be a member of the Team. Some organizations may want users to have primary teams for billing purposes. To designate a user's primary team: 1. In the PagerDuty web app, navigate to **People** → **Users** and click the desired user's **name**. 2. Select the tab **Permissions & Teams** and click **Edit** in the section **Teams and Team Roles**. 3. On the modal that appears, search and select a primary team for the user. You may also remove the primary Team by clicking . ![A screenshot of the PagerDuty web app showing how to manage a user's primary Team](/images/kb/ff169189d107a06fc9f143bd8c8bcbaabd1cf19659082c2f53a96b5706199ff4-manage-primary-team.webp) *Manage primary team* 4. Click **Save**. You can now see the user's primary team in the **Teams & Team Roles** section. ![A screenshot of the PagerDuty web app showing a user's primary team on the user profile](/images/kb/2792b9d9e99cd976be046daf002bcde24b6cb5b0853f1f4d559037129073af07-manage-primary-teams-profile.webp) *Primary team on the user profile* ## Filter by Team The Team filter dropdown is available on most PagerDuty objects in the web app, such as the [Incidents page](/get-started/navigate-incidents-page), [Service Directory](/incident-management/services/service-directory), [Users](/account-admin/advanced-permissions), [Escalation Policies](/incident-management/schedules/escalation-policies), and [Insights](/incident-management/analytics/insights). To filter the UI by Team, in the PagerDuty web app click the **Team** dropdown. You can choose to view **All Teams**, **My Teams**, or select **specific Team(s)**. When you select a Team filter on one page, the filter stays in effect as you navigate to other pages. For example, to quickly see all users in a Team, go to the Team dropdown menu and select your preferred Team, and then go to **People** → **Users**. You only see users associated with the selected Team. Your filter selection does not impact the view that other users see in their accounts. > **Team Filtering Behavior:** Team filter results may vary between the Incidents list and Insights reports because each view evaluates Team associations differently. The Incidents list tracks every Team an incident has been associated with throughout its lifecycle; Insights and Analytics filter strictly by the Team currently associated with the incident’s service at report time. If a service was reassigned to a different Team after an incident triggered, the incident may appear under its original Team in the Incidents list but under the new Team in Insights. This is expected behavior. ## Team Privacy With [Advanced Permissions](/account-admin/advanced-permissions#team-privacy), Teams have the option to be set to **Private** or **Public**. By default, all Teams are public. - **Public**: Teams can be viewed and accessed by users outside of those Teams. - **Private**: Teams cannot be viewed and accessed by users outside of those Teams, except for users with Global Admin or Account Owner base roles. Global Admins and the Account Owner have access to all private Teams. When a Team is set to private, users who are _not_ part of that Team cannot: - View the Team's schedules, escalation policies, services, and incidents - View Event Orchestrations associated with the Team - Find the Team's service or escalation policy when creating a new incident - Find the Team's escalation policy when reassigning or adding responders to an incident - Find the Team when adding subscribers to an incident - Find the Team on the Team lens dropdown, on the **People** → **Teams** page, or on the profile page of a user associated with the Team Users who are _not_ part of that Team can still: - Find users associated with the private Team on the **People** → **Users** page - Find users on the private Team when creating, reassigning, adding responders, or adding subscribers to an incident - Find users on the private Team when creating a schedule override > **Team Privacy Exceptions:** Team privacy does not currently apply to the following pages or configuration objects: > > - [Incident Workflows](/ai-automation/automation/incident-workflows) > - Post-Incident Reviews > - Analytics > **Known Issues:** Depending on the method used, there are some known inconsistencies related to incidents' visibility when a service is added to a private Team. > > **Method 1 (Recommended):** If an admin changes a service's _existing Team's visibility from public to private_, incidents associated with the private Team's service and escalation policy will only be available to members of the private Team, Global Admin users, and the Account Owner (i.e., privileged users). This is the expected behavior. > > **Method 2:** If an admin changes a service's _existing, public Team to a different, private Team_, the old Team's incident permissions will govern the visibility of historical incidents. This has the effect that already existing incidents will remain visible to non-privileged users on the Incidents overview page, as well as on incidents' detail pages. > > **Method 3:** If an admin associates a _service, which currently does not have a Team, with a private Team_, historical incidents will be visible to non-privileged users on the Incidents overview page, however they will not be able to view incident details. ### Edit Team Privacy 1. To edit a Team's privacy, navigate to **People** → **Teams** and select your desired **Team**. 2. Navigate to the **Users** tab on the Team's page and set **External Visibility** to either **Public** or **Private**. ![A screenshot of the PagerDuty web app showing how to edit a Team's external visibility](/images/kb/45c7e2f77634f8ec64a296aa03fe3999128d5188f1652fb4eb64f95e8647a00c-edit-team-privacy.webp) *Team visibility* ## Respond to Incidents From Other Teams The Team that an incident is associated with is based on the [service](/incident-management/services/services-and-integrations#create-a-service) where the incident was triggered. For example, if an incident is triggered on a service associated with the Network Operations Team, then the incident is associated with the Network Operations Team. If the incident is reassigned to an escalation policy or user that belongs to a different Team, then the incident is still associated with the Network Operations Team. Any users who are assigned to the incident can respond to it, even if they are not associated with the Network Operations Team. These users _must_ be directly assigned to the incident to take action on it. They show up under **Assigned to** when viewing the incident in the web app, or **Assignees** in the REST API. However, they do not see the incident on their Incidents dashboard if filtering by My Teams. Any users who are _not_ assigned to the incident _AND_ who do not have access to respond to incidents associated with the Network Operations Team (for example, a user with an Observer or Restricted Access base role and no Team role or object role on the Network Operations Team or its associated objects) cannot respond to the incident. With that in mind, if there is a user who needs to be able to respond to incidents for all or multiple Teams, make sure that the user has any of the following role configurations: - A **Responder** base role. This allows them to respond to incidents associated with any Team. - A **Responder** or **Manager** role on any Team for which they need to respond to incidents. - A **Responder** or **Manager** object role on any service for which they need to respond to incidents. ## REST API Access All users can [create personal REST API keys](/account-admin/api-access-keys#generate-a-user-token-rest-api-key) that match their user permissions. For example, a user with a **Manager** base role can create a personal API key that allows them to edit a schedule. However, they cannot add new users to the account because a Manager base role does not allow this. Global Admins and the Account Owner can create and manage [global API access keys](/account-admin/api-access-keys), which typically offer more API access than user-specific API keys. --- URL: https://docs.pagerduty.com/account-admin/time-zone-settings # Time Zone Settings Administer the account-level, user-level and schedule-level time zones Time zones help users contextualize the information that PagerDuty displays within incidents and schedules. When users are added to an account, their time zones match the [account-level time zone](#change-the-account-level-time-zone) by default. Users can change their [user-level time zone](#change-the-user-level-time-zone), if necessary. Regardless of the account-level time zone, on-call schedules are displayed in the user's preferred time zone. ## Change the Account-Level Time Zone The Account Owner can change the account-level time zone in the web app: 1. Navigate to **User Icon** → **Account Settings** → **Account Settings** tab. 2. Under **Account Details**, select the **Default Time Zone** from the dropdown. 3. Click **Save Changes**. ![A screenshot of the PagerDuty web app showing the default time zone set to "PST Pacific Time"](/images/kb/db76a2863ec475d5ffe2774b477dab604c617c606b5f218d3d0807dd0fc58004-account_time_zone.webp) *Default Time Zone set to "PST Pacific Time"* ## Change the User-Level Time Zone Any user can adjust the time zone for their own account: 1. Navigate to **User Icon** → **My Profile** → **My Profile**. 2. To the right of **Time zone**, click . 3. Select the desired **Time zone** from the dropdown. 4. Click **Save**. ## Change the Schedule-Level Time Zone > **Required User Permissions:** Users with the following roles can create, edit, and delete on-call schedules: > > - User > > - Admin > > - Manager base roles and team roles > - Manager team roles can only manage schedules associated with their team. > > - Global Admin > > - Account Owner > **Free Plan Limit:** Free plans are limited to one schedule. When you create a new schedule, it is set to the [account-level time zone](#change-the-account-level-time-zone) by default. You may, however, adjust the schedule's time zone to differ from the account's time zone. Before changing a schedule with users in multiple time zones, read the section on how [Daylight Saving Time](#daylight-saving-time) may affect your schedules. To change a schedule's time zone: 1. Navigate to **People** → **Schedules** → click next to your desired schedule → **Edit**. 2. In the **Time zone** dropdown, select your preferred **time zone**. 3. Click **Save Schedule**. ![A screenshot of the PagerDuty web app showing a schedule's time zone set to "Pacific Time"](/images/kb/453b62f98a5d86e7b8811785e71d16591fa3cad3470eb7c40d5ebfac38e30e8b-time-zone.webp) *Schedule Time zone set to "Pacific Time"* ## Daylight Saving Time If your account has users in different time zones, consider the following with respect to how [Daylight Saving Time (DST)](https://en.wikipedia.org/wiki/Daylight_saving_time) may impact your schedules: - A schedule defaults to the [account-level time zone](#change-the-account-level-time-zone). You can, however, [change the schedule's time zone](#change-the-schedule-level-time-zone) if you do not want it to match the account's time zone. - Users who are not in the same time zone as the schedule still view it in their own time zone. For example, if a schedule is configured in US Eastern (EST) and it is 9:00 a.m., but another user has their account set to US Pacific (PST), the user's view of the schedule reflects 6:00 a.m. - In the case of DST discrepancies between users' and schedules' time zones (e.g., the user's time zone observes DST but the schedule's does not, and vice versa), the above details still apply. Users in this situation should take note of the following and the potential impact to their schedules: - **Example 1**: If a schedule is set to USA EST (observing DST) at 2:00 a.m., but user Jon has his account set to [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) (not observing DST) at 7:00 a.m., when DST begins in the schedule's time zone, his view of his schedule will advance to 8:00 a.m., but his clock will remain at 7:00 a.m. - **Example 2**: If a schedule is set to UTC (not observing DST) at 7:00 a.m. and user Emily's account is set to US EST at 2:00 a.m., when DST begins in Emily's time zone, her clock will advance to 3:00 a.m., but her view of her schedule will remain at 2:00 a.m. > **Best Practice:** When creating schedules with users in multiple time zones, we recommend taking note of the schedule's time zone and communicating it to any users who may be affected by the observance/non-observance of DST. ## Exceptions Most times in the PagerDuty web app are displayed in the logged-in user's time zone. A possible exception is [Insights](/incident-management/analytics/insights) reports, which give times in the account's time zone if a user has not configured their own time zone. Additionally, any time-related information gathered from the [REST API](/developer/rest-api-overview), such as incident trigger times, are displayed in UTC. --- URL: https://docs.pagerduty.com/account-admin/user-profile # User Profile Set up your profile, contact information, notification rules, user settings and manage passwords. Your user profile is where you configure personal settings, contact information, and notification rules to receive incident notifications. ## Access Your User Profile in the Web App 1. In the top right corner of the web app, navigate to your **User Icon** → **My Profile**. Configure the following items in your user profile: | Tab | Description | | :-------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **My Profile** | Add your name, job title, biography, language, and time zone. Your recent activity appears at the bottom of the page.

For more information, refer to [My Profile](/account-admin/user-profile/my-profile). | | **Contact Information** | Enter your contact information to receive PagerDuty incident notifications.

For more information, refer to [Contact Information](/account-admin/user-profile/contact-information). | | **Notification Rules** | Set up rules to determine how and when you receive notifications about PagerDuty incidents. These rules apply to both the frequency of notifications and the methods used (push notifications, phone calls, SMS, email, or Slack). You can configure different sets of rules for high- and low-urgency incidents, and when incidents change.

For more information, refer to [Notification Rules](/account-admin/user-profile/notification-rules). | | **User Settings** | Configure login information, view your user role, manage linked accounts and applications, and other settings.

For more information, refer to [User Settings](/account-admin/user-profile/user-settings). | | **Permissions and Teams**
_(Available only with advanced permissions)_ | Review your base role, teams you are a part of, and team roles assigned to you.

For more information, refer to [Advanced Permissions](/account-admin/advanced-permissions) and [Teams](/account-admin/teams) articles. | | **On-Call Shifts** | This tab offers a single overview of your shifts across all escalation policies and schedules.

The **My On-Call Shifts** section shows whether you are on call now, with a list of your associated shifts and their schedule for the upcoming weeks and months. It is also available as a widget on the right side of the incidents page, which shows your current shift and your next on-call time.

You can create override shifts across multiple schedules because all shifts are accessible in one place. For more information, refer to [My On-Call Shifts](/incident-management/schedules/my-on-call-shifts). | | **Subscriptions** | Manage your business service subscriptions. After subscribing to a business service, you can receive status updates when there is an incident on a supporting technical service. Status update notifications are configured on the [Notification Rules tab](/account-admin/user-profile/notification-rules) of your user profile.

For more information about subscribing to business services, refer to [Business Service Subscription](/incident-management/services/business-services/subscription). | --- URL: https://docs.pagerduty.com/account-admin/user-profile/contact-information # Contact Information How to add and manage phone, email, SMS, WhatsApp, Slack, and mobile app contact methods so you receive timely incident notifications. In the **Contact Information** tab of the user profile (**User Icon** → **My Profile** → **Contact Information**), you can add and edit contact information. ## Add a Contact Method Add contact methods where you want to receive notifications when you are assigned an incident. The following contact methods are available: - [Mobile App](/get-started/mobile-app) - [Phone and Email](#add-a-phone-or-email-contact-method) - [Slack](#add-a-slack-contact-method) - [SMS](#add-an-sms-contact-method) - [WhatsApp](#add-a-whatsapp-contact-method) > **Recommended:** PagerDuty highly recommends that you: > > - Set up **multiple contact methods**. > - Ensure that your [notification sound settings are enabled](/get-started/mobile-app-settings). > > This reduces the chance that you miss an incident notification. > **Send a Test Notification:** To test that the connection between PagerDuty and your contact method is functioning, follow the instructions in [Test a Contact Method](#test-a-contact-method). Once you have added contact method(s), you must configure your [Notification Rules](#notification-rules), which determine how and when you are notified about incidents. > **Notification Rules After Adding a Contact Method:** After adding a contact method, High-Urgency notification rules are automatically configured. To make additional changes, refer to [Edit a Notification Rule](#edit-a-notification-rule) or [Delete a Notification Rule](#delete-a-notification-rule). > **Maximum Number of Contact Methods:** Each user can have up to 10 different contact methods. However, users are limited to three phone numbers for phone notifications and three phone numbers for SMS. ### Add a Phone or Email Contact Method > **Toll-Free Numbers:** Toll-free numbers are not supported as a contact method. Toll-free numbers are subject to additional regulations and restrictions that differ by region/country, and reliable delivery cannot be guaranteed. To add phone or email contact methods: 1. Navigate to **User Icon** → **My Profile** → **Contact Information** tab. 2. Follow the instructions for your preferred notification method: - Voice: 1. Go to **Voice**. 2. Click **Add Phone Number**. 3. Enter the **phone number**. 4. Select the **phone number type** (for example, Work or Mobile) from the dropdown. If needed, you can configure a [phone number with an extension](#phone-contact-methods-with-an-extension-or-delay). 5. Click **Save**. - Email: 1. Go to **Email**. 2. Select **Add Email Address**. 3. Enter the **email address**. 4. Select the **email type** (for example, Work or Home) from the dropdown. - (_Optional_) Select the **Send Short Email** checkbox to receive short email notifications designed for smaller devices like pagers or mobile phones. - (_Optional_) Select the **Send HTML Email** checkbox if you want to receive HTML emails. If you leave both checkboxes unchecked, you receive plain-text emails. Refer to [Notification Content and Behavior](/incident-management/notifications/notification-content-and-behavior/email-notifications) article for examples of HTML vs plain text emails. 5. Click **Save**. #### Phone Contact Methods with an Extension or Delay When configuring your phone notification methods, you may need to account for pauses, direct extensions, or key presses. You can achieve this by entering one or more commas (`,`), which each represent a one-second delay. > **Tip:** Depending on your phone system, you may need to add commas for pauses before **AND** after your direct extension. 1. In the web app, go to **User Icon** → **My Profile** → **Contact Information** tab. 2. In the **Voice** section, click to the right of the phone number you want to edit, _or_ click **Add Phone Number**. 3. Enter your phone number, followed by a comma (`,`), then your extension. 4. Click **Save**. ![Contact method with an extension](/images/kb/89a2f660098fd3119cecc04053b55df4cea0f96a639445b6f0d38ddb2127e430-voice.png) *Contact method with an extension* #### Examples | Scenario | Contact method entry | Result | | :------------------------------------------------------------ | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------ | | Phone notification method with a direct extension | `415-555-5555,1234` | PagerDuty dials 415-555-5555, waits **one** second, then dials 1234. | | Phone notification method with a direct extension (alternate) | `415-555-5555,,,1234` | PagerDuty dials 415-555-5555, waits **three** seconds, then dials 1234. | | Traverse a phone tree | `415-555-5555,,1,,,2,987` | PagerDuty dials 415-555-5555, waits **two** seconds, dials 1, waits **three** seconds, dials 2, waits **one** second, then dials 987. | | Leave a delay for "Please leave a message after the tone..." | `415-555-5555,,,,,,` | PagerDuty dials 415-555-5555, waits **six** seconds, then leaves a message. | #### Phone Number Formatting PagerDuty uses a third-party provider to validate phone numbers. Phone numbers may not exceed 40 characters, and may only include digits from 0–9 and the following symbols: comma (`,`), asterisk (`*`), and pound (`#`). In some countries, providers require you to format numbers in a specific way. Due to limitations with local providers, Mexico-based SMS contact methods must be free of area code prefixes. For example, the PagerDuty system automatically removes the leading `1` in the phone number `+52 15558889999` and reformats it as `+52 5558889999`. This improves SMS reply deliverability and processing. Additionally, [trunk prefixes](https://en.wikipedia.org/wiki/Trunk_prefix) from the following countries and regions are not supported: - France - Romania - UK - Denmark - Germany - Australia - Thailand - India - North America You must remove trunk codes before adding a phone number as a contact method. For example, a UK-based number with local formatting `01332 412 251` must be formatted for international use without the leading `0`, i.e., `+44 1332 412251`. Trunk codes or prefixes vary by region and may be different from the example provided. ### Add a Slack Contact Method PagerDuty relies on a variety of third parties for notifications. PagerDuty recommends configuring a secondary contact method as a backup to avoid delays caused by availability, traffic, or uptime issues. This ensures the timely delivery of notifications when seconds matter. > **Limitation:** Slack's notification delivery is not rate-limited based on account type. However, free accounts have limited access to certain features like workflows and integrations that might affect how notifications are configured. > **Requirement:** You must have a PagerDuty Slack integration configured with Workspace and user account mapping. View the [Slack Integration Guide](/integrations/slack-integration-guide) for more details. To add a Slack contact method: 1. Navigate to **User Icon** → **My Profile** → **Contact Information** tab. 2. Go to **Slack Extension**, click **Slack Workspace**, and select your **Workspace** from the dropdown. 3. Click **Save**. When you are assigned to an incident, you receive an incident notification as a direct message from the PagerDuty Slack App. Refer to the [Slack User Guide](/integrations/slack-integration-guide/slack-user-guide#incident-card-actions) for more information on responding to Slack incident notifications. ![A screenshot of the Slack UI detailing a PagerDuty incident notification](/images/kb/23e8d415be30a645dbcf527fb8020129a900ee3490c6f49c782e76cf1855831f-slack_notification.png) *Incident notification in Slack* ### Add an SMS Contact Method To receive PagerDuty notifications via SMS, you must first verify your phone number. Verification codes are sent directly to the new SMS number and cannot be sent to other numbers or users for the verification process. Unverified phone numbers cannot receive SMS notifications. To add an SMS contact method: 1. Navigate to **User Icon** → **My Profile** and select the **Contact Information** tab. 2. Go to **Text Messaging**/**SMS** and click **Add Text Messaging**/**Add SMS Number**. 3. Enter your **phone number**, select the **phone number type** (for example, Work or Mobile) from the dropdown, and click **Send Verification**. > **Supported Countries:** Refer to [Supported Countries](/incident-management/notifications/supported-countries#text-notifications) for the list of countries where SMS notifications are supported. If you are in a country with partial support (i.e., marked with an asterisk, `*`), you may not receive the verification message due to local regulations and circumstances beyond PagerDuty's control. You can click **Resend code** to receive another code. However, PagerDuty recommends using the [PagerDuty Mobile App](/get-started/mobile-app) as a primary notification method, as push notifications are delivered much more reliably. 4. When you receive a six-digit verification code on your device, enter it in the modal that appears and click **Verify**. ![A screenshot of the PagerDuty UI showing where to enter an SMS verification code](/images/kb/0acebc6ef2dd555d77a0d700154374ec3e004cf799d7a3eaca9a4b1afc125dcb-verify_SMS_number.webp) *Verify SMS contact method* > **API Users:** Users added via the REST API (for example, using Terraform) must manually verify their phone number in the PagerDuty web app. They see the following banner at the top of their view, instructing them to do so: > > ![A screenshot of the PagerDuty UI detailing a banner that notifies user that they need to verify their phone number in order to receive SMS notifications](/images/kb/209213a991901b45858dd22056950fe6ae10b2689081cb89e4ebe2b038e829d4-verify_number.webp) *Phone number verification banner* > **Reminder:** You receive a reminder email in the event you leave a Contact Method unverified for _an hour or longer_. This reminder is sent once per Contact Method. > > ![Contact Method reminder email](/images/kb/e10a8ed682321ad36e77e581ff65ba49ab7955e9eb7332a96023fcc891f977e8-SMS_Verification_Reminder.png) *Contact Method reminder email* ### Add a WhatsApp Contact Method For global organizations where SMS is not ideal, you can configure WhatsApp as a notification method. WhatsApp numbers must be verified prior to receiving notifications; unverified numbers cannot receive WhatsApp notifications. > **Notes:** - You cannot use the same number for SMS and WhatsApp; select one or the other. With multiple numbers, you can use one for SMS and another for WhatsApp. > - You can switch an existing SMS number to WhatsApp. When switching, notification rules are automatically replaced by the selected method. > - Where messages cannot be delivered on WhatsApp, the fallback message is sent via SMS. > - **Admins**: to block WhatsApp as a notification channel for your organization, contact [support@pagerduty.com](mailto:support@pagerduty.com). To add a WhatsApp contact method: 1. Navigate to **User Icon** → **My Profile**, and the **Contact Information** tab. 2. Go to **Text Messaging** and click **Add Text Messaging**. 3. Enter your phone number and select the phone number type from the dropdown. If supported, the WhatsApp option appears as an applicable notification method. 4. Click **Send Verification**. 5. Once you receive a notification from PagerDuty in WhatsApp, tap **Verify** to complete the setup. ![Add WhatsApp Contact Method](/images/kb/dc4630db05f3ac1727b688681cf4ddc809bce1cf5fe7f195a894b94026b31bce-Add_WhatsApp_1_1.png) *Add WhatsApp Contact Method* [Find out more](/incident-management/notifications/notification-content-and-behavior/whatsapp-notifications#whatsapp-notification-content) on the types of notifications you can receive with WhatsApp. ### Test a Contact Method You may want to send a test notification to confirm that your contact method was added correctly. To test a contact method: 1. In the PagerDuty web app, navigate to **User Icon** → **My Profile** → **Contact Information** tab. 2. Click **Test** to the far right of the contact method you want to test. > **Test Notifications for Phone and SMS:** Test notifications for phone and SMS contact methods are not available in all countries. Refer to [Supported Countries](/incident-management/notifications/supported-countries#test-notifications) for more information. This method establishes a connection between PagerDuty and your contact method without creating a test incident. If you want to test a contact method using a test incident that mimics a production incident, you may also: - [Trigger an incident](/incident-management/incidents/overview#triggerdeclare-an-incident) on a service that uses an [escalation policy](/incident-management/schedules/escalation-policies) you are currently on-call for. - [Add an Events API V2 integration](/incident-management/services/services-and-integrations#add-integrations-to-an-existing-service) to your service that provides a `curl` command to generate a test incident. For more information, refer to [API Reference](/developer/api/reference/rest/incidents/create-incident). ## Edit a Contact Method 1. Navigate to **User Icon** → **My Profile** → **Contact Information** tab. 2. Click to the right of the contact method you want to edit. 3. Make the required changes. 4. Click **Save**. > **Too Many Edits:** You can edit contact methods up to 10 times within a 24-hour period. If you receive the "Contact methods cannot be modified at this time" error, wait for 24 hours and try again. ## Delete a Contact Method 1. Navigate to **User Icon** → **My Profile** → **Contact Information** tab. 2. Click to the right of the contact method you want to delete. 3. Click **OK** to accept the confirmation. ## View Mobile App Devices Under **Mobile App** on your user profile, you can view which devices are registered to receive push notifications. A device is registered to receive push notifications when you [log in to the mobile app](/get-started/mobile-app#log-in-to-the-mobile-app). ### Expired Mobile Devices An **Expired** flag next to a mobile device means that you have not logged into or accessed the mobile app in some time. For security reasons, the PagerDuty system expires the token. To re-enable the device, [remove it as a contact method](#delete-a-contact-method) and then [log in to your PagerDuty account](/get-started/mobile-app#log-in-to-the-mobile-app) on your preferred device. ![Expired mobile device](/images/kb/e23513160272fa8bc459518c002100e35118765c2eb30f476029afbdd870cd16-Expired_Mobile_Device.webp) *Expired mobile device*
--- URL: https://docs.pagerduty.com/account-admin/user-profile/my-profile # My Profile Update your profile information. In the **My Profile** tab of your user profile (**User Icon** → **My Profile** → **My Profile**), you can add your name, job title, biography, language, and time zone settings. Your recent activity appears in the section at the bottom of the page. > **Required User Permissions:** - All users can create, edit and delete their contact information. > - Admins and Global Admins can create, edit and delete contact information for all users, except the Account Owner. > - The Account Owner can create, edit and delete all users’ contact information. ## Edit Personal Information To edit your personal information or another user's personal information: 1. Navigate to **User Icon** → **My Profile** → **My Profile**. To edit another user's personal information, navigate to **People** → **Users** and click **Edit** in the **Actions** column for the desired user's name. 2. Click the icon to the right of your desired field: | Field | Value | | :-------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Name** | The user's name. | | **Title** | Select a job title from the dropdown. | | **Bio** | A text field for additional user information or background. | | **Voice Language Settings** | Set your preferred language. | | **Time Zone** | Select a time zone from the dropdown. Your time zone selection determines the time displayed when reviewing on-call schedules, incident logs, and your on-call shifts. | 3. Click **Save**. ## View Recent User Activity In the recent activity section of your profile page, you can view your activity for the past 14 days. This table includes information about incidents that you acknowledged, resolved, or manually triggered through the web app. --- URL: https://docs.pagerduty.com/account-admin/user-profile/notification-rules # Notification Rules Configure how and when you're alerted for high- and low-urgency incidents, responder invites, and on-call shift changes. Notification rules determine how you are notified when an incident is assigned to you. This applies to both the frequency of notifications and the methods used — push notifications, phone calls, SMS, email, and Slack. You can configure different sets of rules for high and low-urgency incidents, as well as when incidents change. > **User Permissions:** - All users can create, edit, and delete their own notification rules. > - Admins and Global Admins can create, edit, and delete notification rules for all users except the Account Owner. > - The Account Owner can create, edit, and delete notification rules for all users. > **Requirement:** You must first [add contact methods](#add-a-contact-method) to your user profile to configure notification rules. The following notification rule types are available: | Notification Rule Type | Description | | :---------------------------------------------------------- | :---------------------------------------------------------------------------------------------------- | | **When someone invites me to respond to an incident** | Notification rules for being added as a responder to an incident. | | **When a high-urgency incident is assigned to me** | Notification rules for high-urgency incident assignments. | | **When a high-urgency incident assigned to me changes** | Notification rules for assigned high-urgency incidents that are acknowledged, escalated, or resolved. | | **When a low-urgency incident is assigned to me** | Notification rules for low-urgency incident assignments. | | **When an incident I am subscribed to has a status update** | Notification rules for status updates on incidents you are subscribed to. | | **Before I go on-call or off-call** | Notification rules that alert you before you go on or off call. | | **Shift Agent notifications** | Notification rules for upcoming shift conflicts and shift coverage requests. | > **Best Practice:** PagerDuty strongly recommends adding multiple channels to your notification rules. Push notifications have the highest reliability of all delivery methods, so if a third-party SMS or voice carrier experiences an outage, a push notification rule ensures you can still be notified. ## When Someone Invites Me to Respond to an Incident When a user requests your help as a responder on an incident, PagerDuty sends [responder notifications](/incident-management/incidents/add-responders#responder-notifications) using your [high-urgency notification rules](#when-a-high-urgency-incident-is-assigned-to-me). When you receive a responder notification, you are prompted to **Accept** or **Decline** the request. ## When a High-Urgency Incident Is Assigned to Me 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Under **High urgency incident notifications**, click **+**. 3. Enter the number of minutes PagerDuty must wait before sending the notification. The default is **0 minutes**, which sends the notification immediately. 4. Select the contact method you want to be notified on. You can use the same contact method in multiple notification rules. 5. Click **Save**. > **Stagger Notification Rules:** Set a short delay between notification rules so you are not notified simultaneously across all contact methods. For example: > > - A push notification immediately (0 minutes) after assignment > - A phone call after 1 minute > - A Slack notification after 2 minutes > - An email after 3 minutes > - An SMS after 4 minutes > **Escalation Timeout Interaction:** If a notification rule delay is greater than an escalation policy's [escalation timeout](/incident-management/schedules/escalation-policies#escalation-timeout), and an incident escalates to the same user at the next escalation level, that user may receive notifications from the previous escalation level once the configured delay elapses. ## When a High-Urgency Incident Assigned to Me Changes Create notification rules to receive a notification whenever one of your high-urgency incidents changes status — acknowledged, resolved, or escalated. 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Under **High urgency incident state changes**, click **+**. 3. In the first dropdown, select the incident state you want to be notified about: **Acknowledged**, **Resolved**, or **Escalated**. 4. In the second dropdown, select the contact method to notify. 5. Click **Save**. For PagerDuty to deliver a status-change notification, you must have already received a standard high-urgency notification on that channel. If your incident is acknowledged, resolved, or escalated before your initial notification delay elapses — for example, by another user or via the API — you will not receive a status-change notification. Additionally, if you acknowledge or resolve your own incident, you will not receive a status-change notification even if you have a rule configured. > **Acknowledgement Reassigns Before Notifications:** If a user not assigned to an incident acknowledges it, the incident is reassigned to them. Only the current assignee receives notifications, so the originally assigned user is not notified. > > For example, if User B (not currently assigned) clicks **Acknowledge** on an incident assigned to User A: > > 1. The incident is reassigned to User B. > 2. Status-change notifications are sent only to User B. > 3. User A does not receive a notification because they are no longer assigned. ## When a Low-Urgency Incident Is Assigned to Me 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Under **Low urgency incident notifications**, click **+**. 3. Enter the number of minutes PagerDuty must wait before sending the notification. The default is **0 minutes**, which sends the notification immediately. 4. Select the contact method you want to be notified on. You can use the same contact method in multiple notification rules. 5. Click **Save**. ## When an Incident I Am Subscribed to Has a Status Update Configure notification preferences for status updates on incidents you are [subscribed](/incident-management/communicate/communicate-with-stakeholders#add-subscribers-to-an-incident) to. 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Under **Incident status updates**, click **+**. 3. In the dropdown, select a contact method. 4. Click **Save**. To add additional contact methods, repeat the steps above. To edit a rule, click to the right of it. To remove a rule, click to the right of it. ## On-Call Handoff Notifications On-call handoff notifications (OCHONs) alert you up to 48 hours before you go on or off call. These notifications can only be sent as a push notification or email. > **Requirements:** All three of the following conditions must be met for OCHONs to send: > > - You must have on-call handoff notifications configured in your user profile (instructions below). > - You must be a [target](/incident-management/schedules/escalation-policies#escalation-targets) on an escalation policy. > - The escalation policy must have OCHONs enabled. If the escalation policy is attached to a service, OCHONs are always enabled. If it is not attached to a service, follow the instructions in [Escalation Policy Basics](/incident-management/schedules/escalation-policies#on-call-handoff-notification-settings) to enable it. 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Under **On-call and off-call notifications**, click **+**. 3. Enter the following information: | Field | Value | | :---------------------- | :------------------------------------------------------------------------ | | **Hours before shift** | Enter the number of hours before your shift that you want to be notified. | | **Notification timing** | Select whether to be notified before going on call, off call, or both. | | **Contact method** | Select a contact method: mobile app push notification or email. | 4. Click **Save**. ## Shift Agent Notifications Configure [Shift Agent](/ai-automation/advance/shift-agent) notifications to receive updates on upcoming shift conflicts and shift coverage requests. 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Under **Shift agent notifications**, click to add a new rule. 3. Select the Slack account where you want to receive notifications. 4. Click **Save**. ## Edit a Notification Rule 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Click to the right of the notification rule you want to edit. 3. Make the required changes. 4. Click **Save**. ## Delete a Notification Rule 1. Navigate to **User Icon** → **My Profile** → **Notification Rules** tab. 2. Click to the right of the notification rule you want to delete. 3. Accept the confirmation. ## Temporarily Disable Notifications If you are going on vacation or will be unavailable for a period of time, PagerDuty recommends [creating an override](/incident-management/schedules/edit-schedules#create-overrides) for any schedule on which you are on call. This ensures coverage if an incident is assigned to you while you are unavailable. You can create overrides in the web app, mobile app, or [via the API](/developer/api/reference/rest/schedules/create-schedule-override). To ensure you do not receive notifications while unavailable, you can also [delete your notification rules](#delete-a-notification-rule). > **What Deleting Notification Rules Does Not Do:** Deleting notification rules does not prevent incidents from being assigned to you. Incidents can still be assigned and [reassigned](/incident-management/incidents/reassign-incidents#reassign-an-incident) to you as long as you remain on call on a schedule or part of an escalation policy — you will simply not be notified of them. > > Deleting notification rules also does not remove your contact methods. When you are ready to receive notifications again, return to your profile and re-add notification rules. --- URL: https://docs.pagerduty.com/account-admin/user-profile/user-settings # User Settings Manage your login email, password, linked accounts, connected applications, and other account-level settings from your user profile. In the User Settings tab of your user profile (**User Icon** → **My Profile** → **User Settings**), you can manage login information, view your user role, manage linked accounts and applications, and configure other helpful settings. ## Login Email This is the email address you use to sign in to your PagerDuty account. It may be different from the email addresses you have added as contact methods. ### Edit Your Login Email 1. Navigate to **User Icon** → **My Profile** → **User Settings** tab. 2. Click to the right of your **Login Email**. 3. Update your login email address and enter your password. 4. Click **Save**. ![Edit login email](/images/kb/336cca87db6a6a4ad6ad2fe8a59f13274e6472b545713b97a111a7ddf3248ee3-edit_login_email.webp) *Edit login email* ### Edit Another User's Login Email Users with an Account Owner or Admin user role can change another user's login email: 1. Navigate to **People** → **Users**. 2. Click the user name whose email you want to change. 3. Select the **User Settings** tab. 4. Click to the right of the user's login email. 5. Enter a new login email for the user. 6. Enter _your_ password. 7. Click **Save**. ## Password This is the password you use to sign in to your PagerDuty account. ### Change Your Password If you know your password and can log in, you can change your password on your user profile. 1. Navigate to **User Icon** → **My Profile** → **User Settings** tab. 2. In the **Password** section, click **Change Password…** 3. Enter your current password, a new password, and then confirm the new password. > **Password Length:** Passwords must be at least 10 characters long. 4. Click **Save**. ### Reset Your Password If you forgot your password, you can reset it by sending yourself a password reset email. You must be logged out to reset your password. 1. Ensure you are logged out of your PagerDuty account. 2. Navigate to `https://app.pagerduty.com`. 3. Click **Next**. 4. Click **Forgot your password?** 5. Enter your email address and click **Reset Password**. You receive an email containing a link to reset your password. > **Reset Link Expiration:** The password reset URL expires after two hours. 6. Follow the on-screen instructions to reset your password. > **SSO Login:** If you use [SSO](/account-admin/sso) to log in, contact your Account Owner to reset your password with your identity provider. ### Change Another User's Password Users with an Account Owner or Admin user role can change another user's password: 1. Navigate to **People** → **Users**. 2. Select the **user** whose password you want to change. 3. Click the **User Settings** tab. 4. Select **Change Password…**. 5. Enter _your_ password. 6. Enter a new password for the user and confirm it. 7. Click **Save**. > **OAuth Tokens:** In addition to changing the user's password, this action also revokes their OAuth tokens. This means that if they have any open PagerDuty sessions, they will be prompted to sign in to PagerDuty again with the new password. ## Role This is the user role associated with your user account. Only the Account Owner or an Admin user can change another user's role. Refer to [user roles](/account-admin/user-roles) for more information. ## Schedule Color Each user has a color associated with their profile. This color is used in the on-call schedule to quickly identify which periods they are responsible for. ### Edit Your Schedule Color 1. Navigate to **User Icon** → **My Profile** → **User Settings** tab. 2. Click on the right of your schedule color. 3. Select a color from the dropdown. 4. Click **Save**. ![Edit schedule color](/images/kb/f7594ba6420403929e399b38eb18d993c3ef16ae8e2d0eec10c770218854c9c0-edit_schedule_color.webp) *Edit schedule color* ## Calendar Sync your on-call schedules to third-party calendar applications like Google Calendar and Apple Calendar. You can export your schedule in either the WebCal or iCalendar format. Read instructions on [exporting your on-call schedules to your calendar application](/incident-management/schedules/schedules-in-apps#calendar-apps). ## Photo Your profile photo is displayed as your initials on a colored circular background. This is generated automatically, so no external service is used and no action or configuration is required on your part. ## Linked Accounts Third-party applications that you have integrated with PagerDuty, such as Slack, may appear here. ### Unlink Accounts To remove the connection between PagerDuty and a linked third-party account: 1. Navigate to **User Icon** → **My Profile** → **User Settings** tab. 2. Click **Unlink** to the right of the account you want to unlink. 3. Click **Unlink** again in the modal to confirm your decision. ![Unlink Slack account](/images/kb/818a5b45ac254b6714a8dff144dfccb9962d348cd3d0c6a1cd99c19a90b55eed-unlink_account.webp) *Unlink Slack account* ## API Access The API Access section is the starting point for building your own OAuth-connected PagerDuty application. To create a user-specific REST API key that matches your user permissions: 1. Navigate to **User Icon** → **My Profile** → **User Settings** tab. 2. In the **API Access** section, click **Create API User Token**. 3. In the modal, enter a **Description**. 4. Click **Create Token**. 5. Record the API key in a secure place, since the key will not be visible again. ### Delete a User API Key 1. In the web app, navigate to **User Icon** → **My Profile** → **User Settings** tab. 2. In the **API Access** section, click **Remove** next to the key you want to delete. 3. In the modal window that appears, confirm your decision.
--- URL: https://docs.pagerduty.com/account-admin/user-roles # User Roles Overview of basic PagerDuty user roles User roles determine the level of access a user has to incidents and configuration objects, such as [services](/incident-management/services/services-and-integrations), [escalation policies](/incident-management/schedules/escalation-policies), and [schedules](/incident-management/schedules/schedule-basics). > **User Role Tiers:** PagerDuty has two tiers of user roles depending on your account's plan. This article is about accounts with a Free pricing plan. Some legacy pricing plans may also use the basic user roles described in this article. > > If you have a PD Reliability Platform, Professional, Business, Digital Operations (legacy), or Enterprise for Incident Management plan, refer to [Advanced Permissions](/account-admin/advanced-permissions) for information about user permissions. ## User Role Permissions | Action | Stakeholder* | Limited User | User | Admin | Account Owner | | --- | --- | --- | --- | --- | --- | | Subscribe to incidents | ✓ | ✓ | ✓ | ✓ | ✓ | | View:
∙ User profiles
∙ Incidents
∙ Schedules
∙ Escalation policies
∙ Services
∙ Analytics
∙ Post-Incident Reviews | ✓ | ✓ | ✓ | ✓ | ✓ | | Can be added to schedules and escalation policies | | ✓ | ✓ | ✓ | ✓ | | Create overrides for schedules that the user is on-call for | | ✓ | ✓ | ✓ | ✓ | | Trigger, acknowledge, reassign, and resolve incidents | | ✓ | ✓ | ✓ | ✓ | | Add/edit/delete post-incident reviews | | ✓ | ✓ | ✓ | ✓ | | Add/edit/delete:
∙ On-call schedules
∙ Escalation policies
∙ Services
∙ Maintenance windows
∙ Teams | | | ✓ | ✓ | ✓ | | Add new users | | | | ✓ | ✓ | | Delete users (cannot delete the Account Owner) | | | | ✓ | ✓ | | Edit a user's profile/password | | | | ✓ | ✓ | | Create/delete REST API keys | | | | ✓ | ✓ | | Access billing information | | | | | ✓ | | Cannot be deleted | | | | | ✓ | | Change the account owner | | | | | ✓ | | Enable and edit Single Sign-On (SSO) properties* | | | | | ✓ | | Delete the account | | | | | ✓ | \* Available on the following pricing plans: PD Reliability Platform plans, as well as Professional, Business, Digital Operations (legacy), and Enterprise for Incident Management plans. Contact our [Sales Team](https://www.pagerduty.com/contact-us/#contact-sales) if you would like to upgrade to a plan with this feature. ### Stakeholder Users Stakeholders can view objects in an account, but cannot make modifications. Depending on your account's plan, Stakeholders can access the following features: - **Professional Plans**: On Professional plans, Stakeholders can view incidents, services, escalation policies, and similar objects, but cannot action upon these objects. - **Business, Enterprise for Incident Management, and PD Reliability Platform Plans**: On these plans, the intended use case for a Stakeholder is to be an incident [Subscriber](/incident-management/communicate/communicate-with-stakeholders#add-subscribers-to-an-incident). Stakeholders will receive updates about incidents they are subscribed to, but cannot take any action. Stakeholder users are available by default on Digital Operations (legacy), Enterprise for Incident Management, and PD Reliability Platform plans, and can be [purchased as add-on users](https://www.pagerduty.com/pricing/) on Business and Professional pricing plans. Stakeholder licenses are not billed the same as full users. Contact your account representative for more information. ## Check Your User Role To check what role you have, go to **User Icon** → **My Profile**. Depending on your account's plan, your user role information will be found in the following tabs: - **Free, Starter _(Legacy)_, and Team _(Legacy)_ Plans**: These plans will only have a **User Settings** tab, and you will find your **Role** information there. These role types are basic [User Roles](#user-role-permissions). - **Professional, Business, Digital Operations _(Legacy)_, Enterprise for Incident Management, and PD Reliability Platform Plans**: These plans will have an additional **Permissions & Teams** tab where you can find information about your [Base Role](/account-admin/advanced-permissions#base-roles) and any [Team Role(s)](/account-admin/advanced-permissions#team-roles) or [Object Role(s)](/account-admin/advanced-permissions#object-roles) that you may have. These role types are part of [Advanced Permissions](/account-admin/advanced-permissions). ## Edit User Roles Read [Edit User Roles](/account-admin/manage-users#edit-user-roles) for more information about how to edit users' roles and profiles. --- URL: https://docs.pagerduty.com/ai-automation/advance # PagerDuty AI Overview of PagerDuty AI's generative and agentic AI capabilities, including the AI Disclosure and available add-on plans. PagerDuty AI is a set of generative and agentic AI capabilities embedded across the PD Reliability Platform that allows organizations to scale teams and build operational resilience. From AI agents handling well-understood tasks to generative AI for summarizing key information about an incident, PagerDuty AI augments, guides, and resolves operational work. > **Also known as PagerDuty Advance:** This capability is part of the PD Reliability Platform plan. If your organization is not on the PD Reliability Platform plan, you'll see it labeled PagerDuty Advance in your product and account. PagerDuty AI includes: - [PagerDuty AI Assistant](/ai-automation/advance/user-guide#pagerduty-ai-assistant) - [PagerDuty AI Agents](/ai-automation/advance/user-guide#pagerduty-ai-agents) - [PagerDuty AI Integration for Amazon Q](/ai-automation/advance/user-guide#pagerduty-ai-integration-for-amazon-q) - [PagerDuty AI for Post-Incident Reviews](/ai-automation/advance/user-guide#pagerduty-ai-for-post-incident-reviews) - [PagerDuty AI for Status Updates](/ai-automation/advance/user-guide#pagerduty-ai-for-status-updates) - [PagerDuty AI for Automation Digest](/ai-automation/automation/automation-actions#pagerduty-ai-for-automation-digest) - [AI Generated Runbooks](https://docs.rundeck.com/docs/manual/jobs/ai-generated-runbooks.html) (Early Access) > **Availability:** PagerDuty AI is included with PD Reliability Platform plans. It's also available as PagerDuty Advance as an add-on with the following pricing plans: Professional, Business, and Enterprise. [Contact our Sales Team](mailto:sales@pagerduty.com) to upgrade to a plan featuring PagerDuty AI. ## PagerDuty Advance AI Disclosure To learn more about how we designed, built, and assessed PagerDuty AI with mission-critical work in mind, access the PagerDuty Advance AI Disclosure by following these instructions: 1. Navigate to PagerDuty's [Assurance Profile](http://assurance.pagerduty.com). 2. In the top search bar, enter **PagerDuty Advance AI Disclosure** and select the most recent version of the document. 3. Click **** on the document's row to download the document. ![A screenshot of PagerDuty's Assurance website showing how to download the PagerDuty Advance AI Disclosure](/images/kb/a9a0cc5683955a9dd486e69c610f15c7c5f1961c3de3dfbaaf5bd4324d59900c-download_PagerDuty_Advance_AI_Disclosure.png) *PagerDuty Advance AI Disclosure* > **PagerDuty Guidelines for the Safe and Secure Use of Generative AI:** Generative AI is a predictive technology, and sometimes the information it creates is misleading or false. You must fact-check the output of generative AI before you use it. Read the [PagerDuty Guidelines for the Safe and Secure Use of Generative AI](https://www.pagerduty.com/security/generative-ai-guidelines/) for more information. > **Changes to PagerDuty AI:** We continuously improve our generative AI capabilities. If there are material changes to PagerDuty AI generative AI features, we document those in the PagerDuty Advance AI Disclosure. > > While PagerDuty AI is General Access, certain features of PagerDuty AI are currently in Early Access, as noted in the AI disclosure, and are subject to change. ## PagerDuty AI Benefits - [**PagerDuty AI Assistant**](/ai-automation/advance/user-guide#pagerduty-ai-assistant): Reduce mean time to resolution (MTTR) for critical, unplanned work with the PagerDuty AI Assistant, a generative AI chatbot that provides responders with helpful insight from event to resolution. During an incident, you can interact with the PagerDuty AI Assistant in Slack and Microsoft Teams using simple prompts to get a summary of the key information about the incident. It also anticipates common diagnostic questions and suggests troubleshooting steps. - [**PagerDuty AI for Post-Incident Reviews**](/incident-management/after-incident/post-incident-reviews): Generate a post-incident review with data from the Scribe Agent, Slack messages in the incident's dedicated channel, and Incident Lifecycle Events. PagerDuty AI writes the review's narrative sections, creates narrative markers with supporting evidence, and drafts follow-up actions — all editable afterward. - [**PagerDuty AI Slack Side Panel**](/ai-automation/advance/user-guide#direct-messages-using-the-pagerduty-ai-slack-side-panel): You can send direct messages (DMs) and interact with the PagerDuty AI Assistant without these messages being visible to other team members. This messaging interface provides a private, one-on-one conversation channel where you can ask questions, request assistance, and collaborate on tasks directly with the PagerDuty AI Assistant. - [**PagerDuty AI Agents**](/ai-automation/advance/user-guide#pagerduty-ai-agents): AI agents guide and assist responders by taking on tedious or repetitive tasks within your connected ecosystem of tools, freeing up human capacity for high-impact work and innovation. - [**PagerDuty AI Integration for Amazon Q**](/ai-automation/advance/user-guide#pagerduty-ai-integration-for-amazon-q): The integration with Amazon Q enhances incident responses by incorporating data from your Amazon Q Business apps. This connection provides comprehensive operational information from your organization's tools, helping teams resolve incidents more quickly and effectively. - [**PagerDuty AI for Status Updates**](/ai-automation/advance/user-guide#pagerduty-ai-for-status-updates): Generative AI leverages Slack and Microsoft Teams and PagerDuty log entries to create and send internal status updates. When unplanned, interrupting work strikes, communication and coordination are essential. With push-button means of crafting a draft, responders regain the time and resources needed to reduce downtime and team stress levels. With PagerDuty AI for Status Updates, responders easily keep stakeholders informed throughout an incident while remaining focused on resolution. ## Requirements **In PagerDuty**: - You must have the Admin, Global Admin, or Account Owner base role. **In Slack**: - You must be a workspace admin or owner. **In Microsoft Teams**: - A Microsoft Teams Admin must enable third-party apps for your organization to download the PagerDuty app. - A Microsoft Admin must authorize the Microsoft Graph API permissions required by the PagerDuty app. ## How It Works Once the PagerDuty AI Assistant connects to the chat app: - You can [interact with the PagerDuty AI Assistant in a channel](/ai-automation/advance/user-guide#pagerduty-ai-assistant) to receive wider context, potential root causes, and on-call information. - The PagerDuty AI Assistant allows PagerDuty to read the history of channels directly associated with the incident or service. This information combines with PagerDuty incident log entries, allowing you to [generate a Post-Incident Review draft](/ai-automation/advance/user-guide#pagerduty-ai-for-post-incident-reviews) from any resolved incident. - You can [generate status updates](/ai-automation/advance/user-guide#pagerduty-ai-for-status-updates) from an incident, which leverages the associated Slack channel and PagerDuty log entries. ## Enable the PagerDuty AI Assistant and AI Agents ### 1. Connect a Chat Integration - [Connect PagerDuty AI to Slack](#connect-pagerduty-ai-to-slack) - [Connect PagerDuty AI to Microsoft Teams](#connect-pagerduty-ai-to-microsoft-teams) #### Connect PagerDuty AI to Slack 1. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 2. Select the **Assistant and AI Agents Configuration** tab. 3. Under **Chat Integrations**, check your Slack connection status: - If **Slack** shows ** Not Connected**: Install the [Slack | PagerDuty integration](/integrations/slack-integration-guide). - If **Slack** shows ** Update required**: Enable the PagerDuty Slack app's [Optional Scopes](/integrations/slack-integration-guide#app-permissions) to make PagerDuty AI's incident summaries and updates more helpful. This includes "catch me up" and "wrap me up" summaries, status updates, and proactive incident messages. With optional scopes enabled, these features leverage data from relevant Slack conversations. Note that threaded replies are not included. Without these scopes, PagerDuty AI functions using other data sources like incident notes and Scribe Agent transcripts. 4. Confirm that **Slack** shows ** Connected** or ** Update required**. 5. Toggle **Slack** to the **on** position. 6. Optional: Click **Configure** and enable proactive incident messages. - **Proactive Incident Insights**: Toggle **on** to automatically send incident context, symptoms, impact, and investigation suggestions to incident channels when incidents trigger. - **Proactive Incident Summarization**: Toggle **on** to automatically send private incident summaries to new incident channel members and Post-Incident Reviews to incident channels after resolution. ##### Enable the PagerDuty AI Slack Side Panel > **Availability:** This feature is only available on Slack paid plans. > **Required Scopes:** The PagerDuty AI Slack side panel requires [additional scopes](/integrations/slack-integration-guide/slack-permission-changelog#march-10-2025). A PagerDuty Admin might need to [reauthorize the Slack integration](/integrations/slack-integration-guide#approve-app-update) to grant these scopes. 1. In your Slack workspace, navigate to **Preferences** → **Navigation**. 2. Scroll down to **App agents & assistants** and select the **PagerDuty** checkbox. Slack Admins can also enable the PagerDuty AI Slack side panel for everyone in your Slack workspace. Read the [Display AI apps in Slack](https://slack.com/help/articles/33077521383059-Display-AI-apps-in-Slack) article for more information. ##### Edit the Bot User Name If you want to edit the bot's user name after you configure the integration: 1. Navigate to the Slack Marketplace using one of the following methods: - **Via URL**: Go to `https://[your-pagerduty-subdomain].slack.com/marketplace` and click **Manage** in the upper right. Select **PagerDuty** and click the **App Details** tab to redirect to the Slack Marketplace. Select the **Configuration** tab. - **Via Slack**: Select **PagerDuty** from the **Apps** section in the left menu. Click **Configuration** to redirect to the Slack Marketplace. 2. Scroll to the **Bot User** section and click **Edit**. 3. Enter a new **bot name** and click **Save Changes**. #### Connect PagerDuty AI to Microsoft Teams 1. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 2. Select the **Assistant and AI Agents Configuration** tab. 3. Under **Chat Integrations**, if **Microsoft Teams** shows ** Not Connected**: - Install the [Microsoft Teams | PagerDuty integration](/integrations/microsoft-teams). - In Microsoft Teams, add the [Optional Permissions for PagerDuty AI](/integrations/microsoft-teams#what-microsoft-graph-permissions-are-required-by-the-pagerduty-app) to allow communication with PagerDuty AI. 4. Confirm that **Microsoft Teams** shows ** Connected**. 5. Toggle **Microsoft Teams** to the **Enabled** position. 6. Optional: Click **Configure** and enable proactive incident messages. - Toggle **Proactive Incident Insights** to the **on** position. When an incident triggers, automatically send a message to the incident channel with the incident's context, symptoms, overall impact on services and customers, and suggested investigation paths. - Toggle **Proactive Incident Summarization** to the **on** position. When new individuals join an incident channel, automatically send them a private incident summary. After an incident resolves, send a Post-Incident Review to the incident channel. ### 2. Enable or Disable AI Agents > **Required User Permissions:** Account Owners and Global Admins have the ability to enable or disable AI agents. > > If you do not have these permissions, click **Request to Admin** next to the AI agent you want to use. This sends an email request to your admins to enable that agent for you. 1. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 2. Select the **Assistant and AI Agents Configuration** tab. 3. Under **AI Agents**, toggle the switch of an AI Agent to the **Enabled** position. 4. Visit the AI agents' guides for additional setup instructions: - [Insights Agent](/ai-automation/advance/insights-agent) - [Shift Agent](/ai-automation/advance/shift-agent) - [Scribe Agent](/ai-automation/advance/scribe-agent) - [Paige (SRE Agent)](/ai-automation/advance/sre-agent) ### 3. Add Data Sources #### Add a GitHub Personal Access Token Grant access to your GitHub repositories so PagerDuty AI automatically uses incident and chat data to identify and surface important change events that potentially caused the incident. 1. Install the [GitHub Changes | PagerDuty integration](/integrations/github-changes). 2. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 3. Select the **Assistant and AI Agents Configuration** tab. 4. Under **Data Sources**, toggle **Allow PagerDuty AI to access GitHub Repositories** to the **on** position. 5. Copy your [GitHub token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and paste it into the **GitHub Personal Access Token** field. 6. Click **Save Token**. #### Connect PagerDuty AI with Amazon Q PagerDuty AI's integration as a data accessor for Amazon Q enables teams to use chat apps to quickly search and retrieve intelligent insights from multiple external sources connected to your organization's Amazon Q Business apps. For instance, when investigating similar past incidents, you can quickly access relevant runbook documentation from Confluence or pull historical data from ServiceNow, streamlining the troubleshooting and resolution process. For more information on Amazon Q data accessors, read the [Amazon Q Business User Guide](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/data-accessors.html). ##### In the AWS Management Console 1. In the Services search bar, search for and select **Amazon Q Business**. 2. Under the **Applications** section, click **Create application**. 3. On the **Create application** page, configure the following information: | Field | Value | | :----------------------------- | :--------------------------------------------------- | | **Application name** | Enter the new application's name. | | **User access** | Select **Authenticated access**. | | **Access management method** | Select **AWS IAM Identity Center (recommended)**. | 4. Click **Create**. 5. In the left menu, under the **Enhancements** section, select **Data accessors**. 6. Click **Add data accessor** and select the **PagerDuty Advance** data accessor. 7. Update the PagerDuty Advance data accessor's name, data sources, and access permissions. 8. Click **Add data accessor**. 9. Leave the **Data accessor configuration details** prompt open to use when configuring this connection in PagerDuty. ##### In PagerDuty 1. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 2. Select the **Assistant and AI Agents Configuration** tab. 3. Under **Data Sources**, toggle **Enable Amazon Q Business** to the **on** position. 4. On the **Amazon Q Business Configuration Values** modal, enter your PagerDuty Advance data accessor details from AWS: | In PagerDuty | In AWS | Description | | :---------------------------- | :------------------------ | :------------------------------------------------------------------------------------------------------------------- | | **IdC application region** | IdC application region | The AWS region for the IAM Identity Center instance (for example, us-west-2). | | **Application ID** | Application ID | The Amazon Q Business application ID (for example, 1a1a1a1-2b2b-3c3c-4d4d-5e5e5e5e5e). | | **Application region** | Application region | The AWS region for the Amazon Q Business application (for example, us-west-2). | | **Retriever ID** | Retriever ID | The Amazon Q Business retriever ID for PagerDuty Advance (for example, 1a1a1a1-2b2b-3c3c-4d4d-5e5e5e5e5e). | | **IdC application ARN** | IdC application ARN | Also called the Data Accessor Application ARN, the client ID for IAM Identity Center (for example, arn:aws:sso::...). | 5. Click **Save configuration values**. 6. To change these values, click **Edit configuration values**, enter the new values, and click **Save configuration values**. ## Granular Access to PagerDuty AI With PagerDuty AI, Admins can either enable/disable for all PagerDuty users or choose to implement a gradual rollout approach per team. 1. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 2. Select the **Access** tab. 3. Scroll through the list of teams and toggle the ones that you want to grant access to PagerDuty AI **Note:** By default, all teams are enabled to use PagerDuty AI. > **How team access is enforced:** Team-level access is enforced per user, based on PagerDuty team membership. Users on a team with access can invoke PagerDuty AI actions; users who are not cannot. This applies to every access method: the web app, chat integrations (Slack and Microsoft Teams), and the API. ![PagerDuty AI team-level access control](/images/kb/4a5739074851ca97297c4f19e2d7cf3b293dc395c47a5794a7e9b760c97eb381-group_3.webp) *PagerDuty AI team-level access control* ## Enable AI Summaries Enable AI Summaries features to generate AI-powered incident summaries on the PagerDuty web app. 1. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 2. Select the **AI Summaries** tab. 3. Toggle **PagerDuty AI for Status Updates** to the **on** position. Use the latest incident and Slack and Microsoft Teams data to [automatically generate internal Status Updates](/ai-automation/advance/user-guide#pagerduty-ai-for-status-updates). 4. Toggle **PagerDuty AI for Automation Digest** to the **on** position. Use Automation Actions Log data to [automatically generate log digest summaries](/ai-automation/automation/automation-actions#pagerduty-ai-for-automation-digest). **Note:** To access these features with the PagerDuty AI Assistant, you must enable at least one chat integration. ## Manage PagerDuty AI Account Settings To exercise granular control over which PagerDuty AI features are available within your account, manage these features in your PagerDuty AI settings. > **Required User Permissions:** Account Owners and Global Admins can manage PagerDuty AI settings. > > Other roles can only view these settings. For AI Agents, click **Request to Admin** next to the AI agent you want to use to send an email request to your admins to enable that agent. To configure PagerDuty AI settings, navigate to **AI** → **AI Settings** and select from the tabs below: - [Assistant and AI Agents Configuration](#assistant-and-ai-agents-configuration) - [AI Summaries](#ai-summaries) ### Assistant and AI Agents Configuration #### Chat Integrations Toggle the switch of a chat integration to enable or disable the PagerDuty AI Assistant and AI agents for your chat app. - Slack - Microsoft Teams Note: When disabled, the PagerDuty AI Assistant features including Post-Incident Reviews and Slack Side Panel are disabled for your chat app. Click **Configure** on your enabled chat integration to turn proactive messages on or off: - **Proactive Incident Insights**: When an incident triggers, automatically send a message to the incident channel with the incident's context, symptoms, overall impact on services and customers, and suggested investigation paths. - **Proactive Incident Summarization**: When new individuals join an incident channel, automatically send them a private incident summary. After an incident resolves, send a Post-Incident Review to the incident channel. #### AI Agents Toggle the switch of an AI agent to turn it on or off. - [Insights Agent](/ai-automation/advance/insights-agent) - [Shift Agent](/ai-automation/advance/shift-agent) - [Scribe Agent](/ai-automation/advance/scribe-agent) - [Paige (SRE Agent)](/ai-automation/advance/sre-agent) #### Data Sources Toggle the switch of a data source to control the information that the PagerDuty AI Assistant can access. - **Allow PagerDuty AI to access GitHub Repositories**: Automatically use incident and chat data to identify recent code changes that potentially caused the incident. - **Enable Amazon Q Business**: Use Amazon Q Business to retrieve information from its connectors within PagerDuty AI. ### AI Summaries Toggle the switch of an AI Summary feature to turn it on or off. - **PagerDuty AI for Status Updates**: Use the latest incident and Slack and Microsoft Teams data to automatically generate internal status updates. - **PagerDuty AI for Post-Incident Reviews (Beta)**: Use the latest incident and Slack data to automatically generate post-incident review reports. - **PagerDuty AI for Automation Digest**: Use Automation Actions Log data to automatically generate log digest summaries. ## Disable PagerDuty AI 1. In the PagerDuty web app, navigate to **AI** → **AI Settings**. 2. Click **...** in the top right corner. 3. Select **Disable PagerDuty Advance**. 4. Click **Disable**. Note: To re-enable PagerDuty AI, navigate to **AI** → **AI Settings** and click **Enable Advance**. Warning: Disabling PagerDuty AI here does not affect the AI Generated Runbooks (Early Access) feature. If you want to disable that feature, [contact our Sales Team](mailto:sales@pagerduty.com). ## PagerDuty AI User Guide Read our [PagerDuty AI User Guide](/ai-automation/advance/user-guide) to learn more about using PagerDuty AI's features after configuration. ## PagerDuty AI Trial for Legacy Pricing Plans Accounts on some legacy pricing plans (such as Digital Operations) can trial PagerDuty AI. As the Account Owner: 1. In the PagerDuty web app, navigate to **User Icon** → **Account Settings**. 2. In the **Product Trials** section, click **Activate PagerDuty Advance Trial**. Your PagerDuty AI trial begins immediately. You can view your remaining AI Actions and the trial end date. Click **Configure PagerDuty Advance** to manage [PagerDuty AI settings](#manage-pagerduty-ai-account-settings). ## FAQ **How do AI Actions work?** Read our [Product-Specific Terms](https://www.pagerduty.com/product-specific-terms/) for information on AI Actions. **What is the difference between PagerDuty Advance credits and AI Actions?** There is no difference. PagerDuty Advance credits are now called AI Actions. **How many AI Actions does each action type cost?** The current number of AI Actions that each action type consumes is as follows: | Action Type | Description | AI Actions\* | | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | | Automation Digest | One request to summarize the most important results from one Automation Action job using PagerDuty AI for Automation Digest | 1 | | Incident Summarization | One request to summarize an incident using PagerDuty AI Assistant (for example, catch me up or bring me up to speed) | 2 | | Status Update | One request to generate a status update that includes incident status and notes using PagerDuty AI for Status Updates | 3 | | Planned Work | One question that is non-incident related. This includes general questions about the product | 2 | | Scribe Agent | One request that summarizes real-time audio transcripts from videoconferencing tools and generates a post-meeting summary | 6 actions per 30 minutes of bridge time. Plus a one-time charge of 2 actions when a meeting summary is generated at the end of the meeting. | | Shift Agent | Shift Agent is included at no additional cost and does not consume AI Actions. | 0 | | Insights Agent | Insights Agent is included at no additional cost and does not consume AI Actions. | 0 | | Key Moments | Automatically identifies key details from a resolved incident to be included in [post-incident reviews](/incident-management/after-incident/post-incident-reviews). | 0 | | Paige (SRE Agent) | One of the following:

- Each request submitted to Paige via Slack or the **Operations Console** (for example, "What are my past incidents?"), or
- Clicking one of the nudge buttons (for example, **Update runbook**), or
- Paige being triggered via an Incident Workflow or Escalation Policy | 4 | | Premium Workflow Actions\*\* | Workflow Actions marked as premium | 2 | AI Actions were previously known as PagerDuty Advance credits.
\*The number of AI Actions consumed by action type may change at PagerDuty's sole discretion. \*\*Only available on PD Reliability Platform plans. If there are insufficient AI Actions for Premium Workflow Actions, users may not be able to add or edit workflows with Premium Workflow Actions. **How do I view how many AI Actions I have used?** You can see how many AI Actions have been used by navigating to **Analytics** → **PagerDuty AI Analytics** or **AI** → **Usage Analytics**. If you are the Account Owner, you can also review the remaining AI Actions for your subdomain by selecting the **Your Subscription** tab in [Account Settings](/account-admin/account-settings#your-subscription). **What Large Language Models (LLMs) does PagerDuty use?** PagerDuty AI generates outputs with assistance from certain LLM providers. Read the [PagerDuty Advance AI Disclosure](#pagerduty-advance-ai-disclosure) to learn more about how we designed, built, and assessed PagerDuty AI with mission-critical work in mind, including any third-party models used. **Does PagerDuty AI train models using my data?** PagerDuty does not use your data to train models used for PagerDuty AI. **How do I get more compliance, legal, privacy or security information about PagerDuty AI?** - You can read the [PagerDuty Advance AI Disclosure](#pagerduty-advance-ai-disclosure) to learn more about how we designed, built, and assessed PagerDuty AI with mission-critical work in mind. - Stay informed about the compliance status of PagerDuty AI by reviewing our [Services in Scope](https://www.pagerduty.com/security/in-scope-services/) page. **Are there any requirements for PagerDuty AI actions to work?** For minimum requirements, read the [PagerDuty Advance AI Disclosure](#pagerduty-advance-ai-disclosure) for details. Additionally, certain action types work only if certain products are provisioned in your account. For example, the Automation Digest action type requires the Automation Actions product. The following PagerDuty AI Assistant prompts require the following products to work: | Prompt | Required Product | | :----------------------------------------------------------------- | :--------------------- | | Where are the alerts coming from? | Incident Management | | Are there any related services affected? | Incident Management | | Are there any open incidents for \{service name\}? | Incident Management | | Who do I go to for help (who is on call)? | Incident Management | | What happened? | Incident Management | | Catch me up on this incident | Incident Management | | Generate a post-incident review | Incident Management | | Write me a status update message | Incident Management | | How do I set up \{PagerDuty feature\}? | Incident Management | | What are the best practices for \{PagerDuty feature\}? | Incident Management | | Why can I not add notes to a PagerDuty incident? | Incident Management | | What questions can I ask PagerDuty AI? | Incident Management | | What data is used to generate a status report? | Incident Management | | Why are my Android notifications not showing up? | Incident Management | | How can I set up an integration with Jira? | Incident Management | | What is the customer impact? | CSOps | | What changed? | AIOps | | What is the probable cause? | AIOps | | Are any of the changes likely to be the cause of the incident? | AIOps | | Has this incident happened before? | AIOps | **What incident actions can I perform with the PagerDuty AI Assistant?** The PagerDuty AI Assistant now uses intelligent AI routing to connect you with specialized AI agents for different tasks. However, it no longer supports direct incident actions such as acknowledging incidents, adding responders, running workflows, or resolving incidents. You can still perform these incident actions using the PagerDuty app commands and incident card buttons in your chat application. **How can I use the PagerDuty Advance plugin with Amazon Q?** The Amazon Q Business PagerDuty Advance plugin allows you to interact with the PagerDuty AI Assistant. Visit the [Configuring a PagerDuty Advance plugin for Amazon Q Business](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/pagerduty-actions.html) article for more information on configuring this plugin. **What PagerDuty AI Assistant questions are supported In Japanese?** The PagerDuty AI Assistant supports both inputs and outputs in Japanese for these action types: 1. Any Incident Insight question except: - Change Events / Probable Cause - Who is on call - Service context (other services) 2. Any Incident Summarization **How do I migrate from the PagerDuty Advance Slack app to the PagerDuty Slack app?** The PagerDuty Advance Slack app is no longer available. To enable PagerDuty AI in the PagerDuty Slack app, follow the [setup guide](#connect-pagerduty-ai-to-slack). --- URL: https://docs.pagerduty.com/ai-automation/advance/add-paige-as-virtual-responder # Add Paige as Virtual Responder Configure an Incident Workflow to deploy Paige as a virtual responder in Slack or the PagerDuty web app > **Early Access:** This feature is currently in [Early Access](https://www.pagerduty.com/early-access/) and subject to change. ## Overview Paige, PagerDuty's SRE Agent, acts as a virtual responder for your incidents. It automatically investigates as incidents trigger, gathering context from your connected integrations and surfacing recommended next steps. This ensures your team gets the information they need to act immediately, without spending time on manual investigation. ## Enabling Paige Paige is enabled through your existing Incident Workflows. Once configured, Paige activates automatically when an incident triggers—no manual invocation required. ### Key Capabilities When invoked, Paige: - **Reviews** past incidents and notes for historical context. - **Gathers Information** automatically from configured integrations and connectors, including Confluence, log sources, and other connected tools. - **Surfaces Recommended Workflows** so your team can take decisive action quickly. ### Getting Started with Templates To get up and running quickly, PagerDuty provides two pre-built templates for adding Paige to an Incident Workflow. Choose the option that best fits your team's workspace: 1. Navigate to **Incident Workflows** and select **View more templates**. 2. Locate the **Paige Virtual Responder** templates. You can choose to publish Paige's updates directly to: - [A dedicated incident **Slack channel**](#configuring-paige-virtual-responder-in-a-dedicated-incident-channel-in-slack). - [The **PagerDuty Web Application**](#configuring-paige-virtual-responder-in-the-pagerduty-web-app). ### Configuring Paige Virtual Responder in a Dedicated Incident Channel in Slack #### Step 1 - Open the Template 1. Navigate to **Automation** → **Incident Workflows** in the PagerDuty web app. 2. In the templates section at the top, click **Paige virtual responder** in dedicated incident Slack. 3. Review the template preview. 4. Click **Use Template**. #### Step 2 - Configure the Trigger You can configure a [Condition and/or Manual](/ai-automation/automation/incident-workflows#triggers) trigger to run the workflow. > The Conditional Trigger fires automatically when an incident in an associated service is created or updated. The Manual Trigger allows responders to invoke the workflow on demand from an incident. > **Conditional Trigger Tip:** Scoping a conditional trigger to high-urgency incidents is a good starting point to limit noise. #### Step 3 - Configure Add Paige Action 1. Click **Add Paige** action block. 2. Under **Surface**, select **Slack**. - This dynamically links Paige's output to the dedicated Slack channel created for each incident. 3. Click **Save**. #### Step 4 - Publish and Test the Workflow 1. Click **Publish**. 2. Test by triggering an incident on one of your configured services. Paige will automatically create a dedicated Slack channel (e.g., #incident_1234) and post its findings including historical context, root cause analysis, links to relevant runbooks and dashboards, and prioritized next steps. ### Configuring Paige Virtual Responder in the PagerDuty Web App #### Step 1 - Open the Template 1. Navigate to **Automation** → **Incident Workflows** in the PagerDuty web app. 2. In the templates section at the top, click **Paige virtual responder** in PagerDuty. 3. Review the template preview. 4. Click **Use Template**. #### Step 2 - Configure the Trigger You can configure a [Condition and/or Manual](/ai-automation/automation/incident-workflows#triggers) trigger to run the workflow. > The Conditional Trigger fires automatically when an incident in an associated service is created or updated. The Manual Trigger allows responders to invoke the workflow on demand from an incident. > **Conditional Trigger Tip:** Scoping a conditional trigger to high-urgency incidents is a good starting point to limit noise. #### Step 3 - Configure Add Paige Action 1. Click **Add Paige** action block. 2. Under **Surface**, select **PagerDuty Web**. 3. Click **Save**. #### Step 4 - Publish and Test the Workflow 1. Click **Publish**. 2. Test by triggering an incident on one of your configured services. --- URL: https://docs.pagerduty.com/ai-automation/advance/connectors-tools-and-skills # Paige: Connectors and Skills Connect Paige to observability platforms and knowledge bases so it can ground triage recommendations in real system data. Paige, PagerDuty's SRE Agent, retrieves log data, metrics, and runbooks from observability platforms and knowledge bases to guide responders through investigation, triage, and resolution. By connecting your observability stack and institutional knowledge, Paige moves beyond simple alert analysis. - [**Connectors and Tools**](#connectors-and-tools) give Paige real-time access to your logs and metrics, so every triage analysis is grounded in the actual state of your systems — not just the alert payload. - [**Skills**](#skills) give Paige institutional knowledge specific to your environment — your runbooks, your escalation paths, your standards — so it can recommend precise next steps instead of generic ones. Together, these capabilities help your team triage faster with less human involvement, reducing MTTA and MTTR while building confidence in AI-assisted operations. Navigate to **AI Settings** → **Paige Configuration** to get started. > **Prerequisites:** Before configuring connectors, ensure the following: > > - You have Admin or Account Owner permissions in PagerDuty. > - You have credentials or API keys for the third-party integrations you plan to connect. ## Connectors and Tools Connectors link Paige to your external data sources. Once a connector is active, the agent can use its associated tools — such as querying logs or pulling metrics — automatically or via user request. ### Supported Connectors Navigate to **AI Settings** → **Paige Configuration** → **Connectors** to view and manage your connectors. | Connector | Tools | Connection Type | | :-------------------- | :-------------- | :--------------- | | **Arize** | Metrics | API | | | Traces | API | | [**Atlassian**](#atlassian) | Knowledge Base | MCP | | **AWS (CloudWatch)** | Logs | API | | **Azure Monitor** | Logs | API | | **Confluence** | Knowledge Base | API | | **Coralogix** | Logs | API | | **Datadog** | Logs | API | | | Metrics | MCP | | | Traces | MCP | | **Dynatrace** | Logs | API | | **Elasticsearch** | Logs | API | | **GCP** | Logs | API | | **GitHub** | Knowledge Base | API | | | Code | MCP | | | Code (Revert PR) | API | | **Grafana** | Logs | API | | | Metrics | API | | **Honeycomb.io** | Logs | MCP | | | Metrics | MCP | | **Logz.io** | Logs | API | | **New Relic** | Logs | API | | | Metrics | MCP | | | Traces | MCP | | [**Notion**](#notion) | Knowledge Base | MCP | | **Observe Inc.** | Logs | MCP | | | Metrics | MCP | | **Sentry** | Logs | API | | **ServiceNow** | Knowledge Base | API | | **Splunk** | Logs | API | | | Metrics | MCP | | **Sumo Logic** | Logs | API | ### Set up a Connector 1. In the PagerDuty web app, navigate to **AI Settings** → **Paige Configuration** and click the **Connectors** tab. 2. Find the connector you want to add and click **Connect**. If the connector is already listed but shows **Unhealthy**, click the menu to edit or reconnect it. 3. On the **Connect to [Integration] Tools** screen, select an existing connection from the dropdown or click **Manage Connections** to create a new one. 4. Under **Agent May Use These Tools**, check the tools you want to enable. 5. Click **Save**. The connector appears in your list with a status of `Active` once the connection is established. ### Connector Statuses - **Active:** The connector is healthy and Paige can use its tools. - **Unhealthy:** The connection exists but is failing. Check your credentials or API key and reconnect. - **Not Connected:** No connection has been set up. Click **Connect** to configure it. ### Connector Setup Notes #### Atlassian The Atlassian connector lets Paige search Confluence and read pages through Atlassian's remote MCP server. It uses OAuth 2.1 with PKCE and doesn't need a client secret or API key. Paige's access is read-only: it can search Confluence and read pages, and it can't create or change content. > **Admin Prerequisite:** Before anyone connects, an Atlassian organization admin must allow PagerDuty's OAuth callback URL in Atlassian Administration. Navigate to **Rovo** → **Rovo MCP server** → **Your domains**, and add the exact callback URL for your PagerDuty region: > > - US: `https://api.pagerduty.com/actions/public/oauth/redirect` > - EU: `https://api.eu.pagerduty.com/actions/public/oauth/redirect` > > If the domain isn't allowed, Atlassian blocks the redirect and shows an error that starts with "Your admin has blocked this domain...". A newly added domain can take a few minutes to take effect, so if you see this error right after adding it, wait a few minutes and try connecting again. To connect Atlassian, follow [Set up a Connector](#set-up-a-connector) and select **Atlassian**. When you create a new connection, you sign in to Atlassian, select the site to integrate, and approve access. PagerDuty requests read access to Confluence content, Confluence search, Rovo search, and your basic Atlassian profile. Paige uses these to list the Atlassian sites you can access, search Confluence in natural language or with CQL, and read a Confluence page by ID or URL. Searches that Paige runs through the Atlassian connector use Rovo credits from your Atlassian plan. Atlassian access tokens last 8 hours. PagerDuty checks the connection and refreshes the token every hour. If the connector shows **Unhealthy**, reconnect it to sign in to Atlassian again. #### Notion The Notion connector connects Paige to a Notion workspace through Notion's hosted MCP server. It uses OAuth 2.1 with PKCE and doesn't need a client secret or API key. Paige's access is read-only: it can search and read pages, databases, and data sources, and it can't create, edit, or delete Notion content. You can also paste a Notion page URL in chat so Paige reads that page. To connect Notion, follow [Set up a Connector](#set-up-a-connector) and select **Notion**. When you create a new connection, you sign in to Notion and approve access. Each connection covers one Notion workspace: the one you select when you approve access. When the workspace has a Notion AI plan, Paige uses Notion's AI (natural-language) search. Otherwise, Paige falls back to keyword search. Paige doesn't show Notion upgrade links in either case. Notion access tokens last 8 hours, and the connection health check refreshes them hourly. Notion requires you to re-authorize after 180 days, or after 30 days without use. If the connector shows as **Unhealthy**, reconnect it to fix it. ### Runbook Links When Paige is provided access to documents, it fetches a document if it determines the document is relevant or if you request it in chat. #### Confluence 1. Set up the [Workflow Integration](/ai-automation/automation/incident-workflows/workflow-integrations) and [set up the connector](#set-up-a-connector). Alternatively, set up the [Atlassian connector](#atlassian), which doesn't need a Workflow Integration. Paige fetches a Confluence runbook link through whichever one is enabled for your account. > **OAuth Access:** If you have set up your OAuth connection to Confluence but the integration is not working, verify that your admin has approved your user access to the PagerDuty app in Confluence. If you use the Atlassian connector, see the [admin prerequisite](#atlassian) for allowing PagerDuty's callback URL in Atlassian. 2. If you have your runbook link configured, Paige should identify it in the event payload. 1. If Paige doesn't identify the runbook link, update the event payload in your monitoring tool to include your Confluence runbook link in `custom_details` using the following nested key: ```json "custom_details": { "runbook_url": { "confluence": "https://YOUR-RUNBOOK-LINK" } } ``` #### GitHub 1. Set up the [Workflow Integration](/ai-automation/automation/incident-workflows/workflow-integrations) and [set up the connector](#set-up-a-connector). > **Branch Requirement:** Linked documents must already be committed to the main branch and cannot be from a feature branch. 2. If you have your runbook link configured, Paige should identify it in the event payload. 1. If Paige doesn't identify the runbook link, update the event payload in your monitoring tool to include your GitHub runbook link in `custom_details` using the following nested key: ```json "custom_details": { "runbook_url": { "github": "https://YOUR-RUNBOOK-LINK" } } ``` #### ServiceNow 1. Set up the [Workflow Integration](/ai-automation/automation/incident-workflows/workflow-integrations) and [set up the connector](#set-up-a-connector). 2. If you have your runbook link configured, Paige should identify it in the event payload. 1. If Paige doesn't identify the runbook link, update the event payload in your monitoring tool to include your ServiceNow runbook link in `custom_details` using the following nested key: ```json "custom_details": { "runbook_url": { "servicenow": "https://YOUR-RUNBOOK-LINK" } } ``` #### Set Custom Details with Orchestration Rules You can use [orchestration rules](/ai-automation/aiops/event-orchestration#step-2-create-rules) to update the event payload to include your runbook links in `custom_details`. 1. Navigate to an orchestration. 2. Navigate to **Edit Event Rule** → **Event Fields** → **Add Event Field**. 3. Click the **Select Field** dropdown and add a custom details path to the event field: - For GitHub: `runbook_url.github` - For Confluence: `runbook_url.confluence` - For ServiceNow: `runbook_url.servicenow` ![Configuring a runbook link in event fields](/images/kb/e23e94c9c6502cb5f824251f8c26e398dd536bb965556ab6520bc9404433aa90-screenshot_2026_02_06_at_1_40_01_pm_1.webp) *Configuring a runbook link in event fields* 4. Under **Replace using**, select **Template**. 5. In **Replace with value**, paste the URL of the runbook. 6. Click **Save**. ### Best Practices - Log queries work best when there are query examples in the runbook or alert payload. Sample queries in the alert payload can be in any `custom_details` field. - You can also provide queries directly to the agent to help ensure accurate log search. ### Prompt Examples - **@pagerduty** can you fetch the logs for this incident? - **@pagerduty** can you search the logs with this criteria [_enter criteria_]? ## Skills > **Skills (Available in Early Access):** Arm your agent with specialized domain expertise using custom instructions, scripts, and runbooks. Skills are available through **AI Settings** or the PagerDuty Claude plugin. Skills let you give Paige custom instructions, runbooks, and scripts for specialized domain expertise. Rather than relying only on retrieved data, a skill tells the agent how to handle specific situations, so it can work out the next steps for troubleshooting an issue. ### How Paige Uses Skills Skills load progressively to keep Paige's context focused. Paige does not read every skill's full instructions up front. Paige may load a skill automatically if it decides the skill is relevant. After loading it, Paige may choose not to run the skill if the instructions do not fit the problem it is working on. > **Skills Do Not Run on Conditions:** Paige does not support running a skill when specific conditions are met, such as alert fields, incident title patterns, urgency, or lifecycle events. A skill is not guaranteed to run for every matching incident. > > To make Paige more likely to use a skill in a specific scenario: > > - **Write a clear name, description, and examples.** These are the only cues Paige has before it loads the skill. > - **Reference the skill in a runbook.** For example: "For suspected security issues, use the `detect-security-incident-logs` skill." > - **Reference the skill in a custom triage skill.** For example: "If the alert custom details include `type: possible_security_issue`, run the `detect-security-incident-logs` skill." > - **Ask for it directly** in chat. ### What a Skill Contains Each skill is a structured set of instructions with the following components: | Component | Details | | :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **When to Use** | Guidance that helps Paige confirm this is the right skill after it loads. This does not make the skill run automatically. | | **Prerequisites** | The integrations or data the agent needs to execute the skill. | | **Execution Steps** | Step-by-step instructions the agent follows. | | **Error Handling** | How the agent should gracefully degrade if a step fails. | | **Success Criteria** | How the agent determines whether the skill ran successfully. | | **Examples** | Three to five example requests or scenarios where this skill applies, each up to 200 characters. Along with the name and description, Paige uses these to decide whether to load the skill. | #### Example Skill: detect-security-incident-logs The following is an example of a fully structured skill that you can use as a template. This skill searches Datadog and AWS CloudWatch logs for critical security events. **Name:** `detect-security-incident-logs` **Description:** Searches Datadog and CloudWatch logs for critical security events. Use when an incident may involve a security issue or a responder asks to check for security incidents. **Example Instructions:** ```text When to use: - The incident or alert suggests a possible security issue (for example, alert custom details include type: possible_security_issue) - A responder asks the agent to check for security incidents Prerequisites: - Datadog connector configured and active - AWS CloudWatch connector configured and active Execution steps: 1. Search Datadog logs for the exact phrase SECURITY_INCIDENT: CRITICAL within the incident time window. 2. Search AWS CloudWatch logs for the exact phrase SECURITY_INCIDENT: CRITICAL within the incident time window. 3. If matches are found in either source, surface the key log details in Paige's response. 4. Recommend triggering the Alert Security Team incident workflow. Error handling: - If one connector is unavailable, continue with the other and note which source was skipped. - If both connectors are unavailable, inform the responder and suggest checking logs manually. Success criteria: - The agent has queried both log sources and reported results or confirmed no matches were found. Examples: - "Check for any security incidents in the logs" - "Are there critical security events related to this incident?" - Triaging an alert where custom_details includes type: possible_security_issue ``` ### Create a Skill You can create skills in the PagerDuty web app or with the PagerDuty Claude plugin. #### In the PagerDuty Web App 1. In the PagerDuty web app, navigate to **AI Settings** → **Paige** → **Configure** and click the **Skills** tab. 2. Click **Add Skill**. 3. On the **New Skill** page, complete the following fields: | Field | Value | | :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Name** | Enter a unique, descriptive identifier for the skill (for example, `escalation-runbook`). Paige uses the name to decide whether to load the skill. | | **Description** | Enter a short description of what the skill does and when it should be used (for example, `Guides the agent when escalating incidents to a secondary team`). Paige uses the description to decide whether to load the skill, so be specific. | | **Instructions** | Enter the full instructions to send to the LLM. Use the structure described in [What a Skill Contains](#what-a-skill-contains) as a guide. | | **Make skill available to everyone** | Check this option to make the skill accessible to everyone in the account. When unchecked, the skill is only available to you. | 4. Click **Save**. Paige can use the skill on future incidents. ![Creating a skill in the PagerDuty UI](/images/kb/35f9fe4cac2bddbacf68be53fda97be5f5fab322f946c9cf26c8b51fee374326-Screenshot_2026-06-02_at_1.43.14_PM.png) *Create a skill in PagerDuty* #### Use the Claude Plugin 1. Install the PagerDuty Claude plugin. 2. Run the `/pagerduty:create-pagerduty-skill` command and follow the guided prompts to define the skill's name, description, instructions, usage guidance, and examples. 3. Once created, Paige can use the skill on future incidents. ### Test a Skill After creating a skill, test it by asking Paige to use it in chat on a relevant incident, or by triggering an incident that your runbook or triage skill links to the skill. Then review what the agent reports in: - The **Paige** tab on the incident details page. - Your ChatOps channel (Slack or Microsoft Teams). --- URL: https://docs.pagerduty.com/ai-automation/advance/insights-agent # Insights Agent Unlock the power of your operational data directly from Slack and MS Teams. The Insights Agent delivers proactive recommendations and on-demand conversational insights based on your Incidents, Services, and Teams analytics. By surfacing operational risks, trends, and patterns, this AI agent empowers data-driven decision making and building more resilient operations. > **Availability:** This feature is included with PD Reliability Platform plans. It's also available as PagerDuty Advance on Professional, Business, and Enterprise plans. > > [Contact our Sales Team](mailto:sales@pagerduty.com) if you would like to upgrade to a plan featuring PagerDuty AI. > **Required User Permissions:** An Admin, Global Admin, or Account Owner role can manage [PagerDuty AI](/ai-automation/advance) settings. > > Any user with a linked PagerDuty account can interact with the Insights Agent. All users can see Insights Agent responses within a public channel. ## Configure Insights Agent Insights Agent is automatically activated for all customers who have enabled PagerDuty AI. Follow the instructions in our [PagerDuty AI](/ai-automation/advance#connect-pagerduty-ai-to-slack) article to enable PagerDuty AI in Slack. ## Disable Insights Agent Disable the Insights Agent by toggling its switch to the **off** position on the [AI Settings](/ai-automation/advance#2-enable-or-disable-ai-agents) page. ## User Guide The Insights Agent can answer questions and synthesize patterns, trends, and risks associated with data available in the Incident, Service, and Teams Analytics reporting in PagerDuty. You can ask any Insights Agent question in one of the following ways: - In a public channel, enter `@pagerduty `. - In a [PagerDuty AI](/ai-automation/advance/user-guide#pagerduty-ai-assistant) chat, enter your question. ### Prompt Examples You can use the example prompts below to find answers to common questions and identify risks, trends, and patterns: #### Point in Time - How many incidents did \{Team\} get in Dec 2024? - How many high urgency incidents were there last week on \{Team, Service\}? - Which teams had an MTTA above 5 minutes (or other internal SLO) for high urgency incidents last month? #### Trend - How has the average time to resolve incidents changed over the past 6 complete months for \{Team\}? - What are the incident trends over the last month compared to the prior 6 months on \{Team, Service\}? - Which teams consistently have the most high urgency incidents? #### Comparison: Period vs Period - Compare sleep hour interruptions on \{Team\} between the first and second half of 2024. - Was MTTx faster this month for high urgency incidents than last month on \{Team, Service\}? - How many incidents had added responders? How does that compare this month to last month? #### Comparison: vs Baseline - Is aggregate MTTR in Dec 2024 better than the 2024 baseline for these 3 services: \{Service A\}, \{Service B\}, and \{Service C\}? #### Comparison: vs Benchmark - Using our best month in 2024 as a benchmark, describe the high urgency volume on \{Service\} in Jan 2025. ### Proactive Recommendations Proactive recommendations and summary Analytics data (MTTx, etc) are sent to Team Managers, Admins, and the Account Owner via direct message from the PagerDuty app in Slack. These proactive messages are associated with the user's specific Teams and Services. A message is only sent when the user has one or more recommended actions to improve their operational maturity on the PagerDuty platform. > **Availability:** - Admins and the Account Owner can receive recommendations on all paid plans. > - Team Managers can receive recommendations on the Business pricing plan and above. > - Users with a base role of Manager who are also assigned a Team role of Manager on one or more Teams can receive recommendations. Account Owners and Global Admins are eligible to receive proactive messages without any Team roles required. > - Users with base roles below Manager cannot receive any proactive messages at this time. You must link your PagerDuty and Slack user accounts in order to receive proactive recommendations. See our [Slack User Guide](/integrations/slack-integration-guide/slack-user-guide#link-user-accounts) for more information on linking accounts. Proactive recommendations only suggest features that are available in your current pricing plan. Example recommendations may include utilizing [incident workflows](/ai-automation/automation/incident-workflows) or enabling specific service settings such as [dynamic notifications](/incident-management/incidents/dynamic-notifications) and [alert grouping](/ai-automation/aiops/noise-reduction/alert-grouping). ![Slack direct message from the PagerDuty app suggesting a recommended action to improve operational maturity](/images/kb/c4dcefc80692e2aa6811d86329b6fd2c5555e1953faac1dae12d2fd6ea2b6ccc-insights-agent-recommendation.webp) *Proactive recommendation example* Clicking on a service-level recommendation takes you to your PagerDuty account where you can turn on the suggested service configuration setting for one or many services at a time. ![PagerDuty service settings screen with a toggle to enable Dynamic Notifications for one or more services](/images/kb/14526226c59b45909b0b0cc0c3965ceac196b6d1e185b833c9bca85397596a72-insights-agent-enable-dynamic.webp) *Enable Dynamic Notifications recommendation* #### Opt-Out of Proactive Recommendations You can opt-out of receiving these proactive messages within Slack by clicking **Unsubscribe**. Opting-out of these proactive messages does not prevent you from using the Insights Agent via conversational insights in Slack. ### Rate AI Response You can rate the AI responses for the conversational insights with the Insights Agent by selecting **Rate AI Response**. This prompts you to provide additional feedback. ![Slack message from the Insights Agent with a Rate AI Response button below the reply](/images/kb/d20e9f590e91bd5f4b84dc934294886938957a11b184dd46070ac354d31e3939-agent-rate-ai-response.webp) *Provide Feedback on AI Response* ## FAQ **How often are Proactive Recommendations sent?** Proactive recommendations are sent on a weekly basis. **How many AI Actions does the Insights Agent use?** Insights Agent is included at no additional cost and does not consume AI Actions. --- URL: https://docs.pagerduty.com/ai-automation/advance/pagerduty-mcp-server # PagerDuty MCP Server Connect AI tools to PagerDuty with MCP to securely manage incidents, services and on-call schedules The PagerDuty Model Context Protocol (MCP) Server is an open standard that enables AI assistants (like Claude Desktop, Cursor, or VS Code) to interact securely with your PagerDuty account. This integration allows AI tools to retrieve incident data, manage services, and update on-call schedules on your behalf. ## Integration Options You can connect your Agents to PagerDuty using the PagerDuty-hosted MCP server, a managed service with the latest features at `https://mcp.pagerduty.com/mcp`. No setup, nothing to install. > **Local MCP Server Deprecation Notice:** The self-hosted MCP server is now deprecated and its GitHub repo is archived and read-only. > > Use the PagerDuty-hosted MCP server to get the latest features. ## Requirements Before setting up either MCP option, ensure you have: - **PagerDuty Account Access**: A valid PagerDuty account with [Advanced Permissions](/account-admin/advanced-permissions). - **API Key**: [A PagerDuty User API key](/account-admin/api-access-keys#generate-a-user-token-rest-api-key), or an [OAuth client](/developer/oauth-functionality) if you are using the PagerDuty-hosted server. - **MCP Client**: An MCP-compatible AI assistant or application (e.g., Claude Desktop, VS Code, Cursor). For the PagerDuty-hosted server, the client must support remote (HTTP-based) MCP servers. ## PagerDuty-hosted MCP Server The PagerDuty-hosted MCP server lets you connect your AI assistant to PagerDuty without installing anything locally. It supports both OAuth and API keys for authentication, which makes it straightforward to roll out across teams and enterprise environments. Unlike self-hosted servers, which run as a subprocess on your machine, the PagerDuty-hosted server: - Is hosted and maintained by PagerDuty - Exposes tools via a remote HTTP endpoint - Requires no local Python installation or `uvx` ### Step 1: Choose an Authorization Method Both user-level and account-level credentials are supported. Note that some tools and filters require user-level authentication — for example, scoping `list_incidents` by `teams` or `assigned`. **To authorize with an API Key**, provide a custom header: ```shell Authorization: Token token= ``` **To authorize with OAuth**, you have two options: - Provide static client credentials for [OAuth metadata discovery](https://modelcontextprotocol.io/specification/draft/basic/authorization#authorization-server-discovery). - Provide a token directly via a custom header: `Authorization: Bearer `. For example, to use an [App OAuth Token](/developer/private-apps#app-tokens) obtained via the `client-credentials` grant. For more on creating OAuth clients for your PagerDuty account, see [OAuth Functionality](/developer/oauth-functionality) on the PagerDuty Developer Portal. > **Dynamic Client Registration:** PagerDuty does not currently support Dynamic Client Registration (DCR). ### Step 2: Configure Your MCP Client > **EU Service Region Accounts:** PagerDuty-hosted configurations on EU accounts should use: `` #### Cursor Add the following to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (current project only): ```json { "mcpServers": { "pagerduty": { "url": "https://mcp.pagerduty.com/mcp" } } } ``` #### Visual Studio Code Add the following to your `settings.json`. **With OAuth** — Visual Studio Code prompts you for the OAuth client credentials when the server starts, and provides the redirect URIs you need: ```json { "mcp": { "servers": { "pagerduty": { "type": "http", "url": "https://mcp.pagerduty.com/mcp" } } } } ``` **With an API key** — Visual Studio Code prompts you for the key on first use and stores it securely: ```json { "mcp": { "inputs": [ { "type": "promptString", "id": "pagerduty-api-key", "description": "PagerDuty API Key", "password": true } ], "servers": { "pagerduty": { "type": "http", "url": "https://mcp.pagerduty.com/mcp", "headers": { "Authorization": "Token token=${input:pagerduty-api-key}" } } } } } ``` #### Claude Code **With OAuth**, you need to use a static port in the redirect URL — for example `http://localhost:8080/callback` — and then provide that port during configuration: ```bash MCP_CLIENT_SECRET=YOUR_CLIENT_SECRET claude mcp add-json pagerduty '{"type":"http","url":"https://mcp.pagerduty.com/mcp","oauth":{"clientId":"YOUR_CLIENT_ID","callbackPort":8080}}' --client-secret ``` **With an API key:** ```bash PAGERDUTY_API_KEY=YOUR_API_KEY claude mcp add-json pagerduty '{"type":"http","url":"https://mcp.pagerduty.com/mcp","headers":{"Authorization":"Token token=${PAGERDUTY_API_KEY}"}}' ``` ### Tools Available | Tool | Actions | | --- | --- | | `browse_incidents` | list, get, list_alerts, get_alert, list_notes, context (related\|past\|outlier), list_change_events, list_workflows, get_workflow | | `manage_incidents` | create, update, add_note, add_responders, start_workflow | | `browse_services` | list, get | | `manage_services` | create, update | | `browse_schedules` | list, get, list_users, list_oncalls | | `manage_schedules` | create, update, create_override | | `browse_teams` | list, get, list_members | | `manage_teams` | create, update, delete, add_member, remove_member | | `browse_event_orchestrations` | list, get, get_router, get_service, get_global | | `manage_event_orchestrations` | update_router, append_router_rule | | `browse_alert_grouping` | list, get | | `manage_alert_grouping` | create, update, delete | | `browse_status_pages` | list, list_severities, list_impacts, list_statuses, get_post, list_post_updates | | `manage_status_pages` | create_post, create_post_update | | `browse_escalation_policies` | list, get | | `browse_users` | list, get | | `browse_change_events` | list, get, list_service | | `browse_activity` | list_log_entries, get_log_entry | ### Limitations - **Tool filtering** is not directly available for the PagerDuty-hosted server at this point in time. You can, however, limit which tools succeed by using a [Scoped OAuth client](/developer/oauth-functionality#scoped-oauth). ### Troubleshooting If you cannot connect to the PagerDuty-hosted server: 1. Verify that your authorization is still valid, and re-generate it if not. See [Authentication](/developer/authentication) for more details. 2. Check that your MCP client supports remote (HTTP-based) MCP connections. 3. Consult the [PagerDuty MCP API Reference](/developer/api/reference/mcp/pagerduty-mcp-api/mcp-root) for the latest endpoint URLs and requirements. ## API Reference Explore the PagerDuty MCP API specification on the [PagerDuty MCP API Reference](/developer/api/reference/mcp/pagerduty-mcp-api/mcp-root). --- URL: https://docs.pagerduty.com/ai-automation/advance/paige-recommended-workflows # Paige Recommended Workflows Paige analyzes configured incident workflows and recommends the most relevant one for each incident's context ## Overview Paige helps streamline incident response by analyzing configured incident workflows and recommending the most relevant one based on the real-time context of each incident. Recommendations include an explanation of the reasoning and a potential ranked list of workflows. You can use this feature in: - **Operations Console (AIOps customers only)**: On the **Paige** tab within an incident view, you see the agent's recommendation summary and reasoning, along with a **Run recommended workflow** button. - **Incident Details Page**: On the **Paige** tab in the side panel, you see the agent's recommendation summary and reasoning, along with a **Run recommended workflow** button. - **Slack**: Recommended workflow and run options appear within your associated incident channel. ## Evaluate Incident Context 1. Paige automatically reviews the incident context, including event payloads, historical incident patterns, service integrations, and conversation history. 2. Click the **Recommend a Workflow** prompt. This action triggers Paige to evaluate all configured incident workflows. ![Paige displays Recommend a Workflow in Slack](/images/kb/577667da31fb56bbfabb21c73a707ecdb01b5167109a4f4e8f1fca3bba9866ad-Recommendations.png) *Paige displays Recommend a Workflow in Slack* 3. Review the top recommendation and alternative recommendations. Paige identifies the workflow that best matches the current situation and presents it as the top recommendation, along with other relevant alternatives. Each recommendation includes a brief reasoning for why it was selected. > **Recommendation Conditions:** Recommendations only appear if incident workflows are properly configured in your account, and Paige identifies a high-confidence match between the incident and available workflows. 4. Review Paige's logic and click the **Run recommended workflow** prompt to execute the automation. ![Paige displays Run recommended workflow nudge in Operations Console](/images/kb/c81eb9794a223d1539fd2a37b21f5b06e9fff753e6a626f1b05caf12e00f6dbe-Run_workflow.png) *Paige displays Run recommended workflow nudge in Operations Console* 5. Enter natural language in the chat to ask Paige for a specific alternative if the top recommendation is not what you need (for example, "Recommend the rollback workflow instead"). Paige then surfaces that specific prompt for execution. > **Execution Guidelines:** - **Execution Limit**: Each recommended workflow can only run **once per incident**. > - **Re-run Notifications**: If you attempt to trigger a workflow that has already run, Paige sends a message in the **Operations Console**, the **Incident Details** page, and Slack to indicate that you cannot re-execute the workflow. > - **Success Confirmation**: Once a workflow triggers, Paige displays a confirmation message to verify successful execution. > - **Timeline Audit**: The system automatically logs all workflow executions in the **Timeline** tab of the **Incident Details** page for auditing and visibility. --- URL: https://docs.pagerduty.com/ai-automation/advance/scribe-agent # Scribe Agent Transcribe incident meetings in real time to enhance incident summaries and post-incident reviews PagerDuty Scribe Agent ingests video conference transcripts and chat messages in real time to ensure comprehensive and consistent record keeping and eliminate manual information gathering. The agent enhances incident summarization features like "catch me up" and "wrap me up" prompts, and status updates, by including transcripts from both active and completed meetings. To support continuous improvement, the Scribe Agent enriches [post-incident reviews](/incident-management/after-incident/post-incident-reviews) by capturing critical context and timeline details. > **Availability:** Agents are a [PagerDuty AI](/ai-automation/advance) feature. PagerDuty AI is included with PD Reliability Platform plans. It's also available through one-time credits or as an add-on with the following pricing plans: > > - Professional > - Business > - Enterprise for Incident Management > > Please [contact our Sales Team](mailto:sales@pagerduty.com) if you would like to upgrade to a plan featuring PagerDuty AI. ## Supported Platforms ### Chat Apps The Scribe Agent can send meeting transcripts to the following chat apps: | Platform | Transcription Delivery Support | | :-------------- | :----------------------------- | | Slack | ✓ Supported | | Microsoft Teams | ✓ Supported | ### Video Conferencing Platforms The Scribe Agent can join and transcribe meetings on the following video conferencing platforms: | Platform | Transcription Support | Limitations | | :-------------- | :-------------------- | :---------------------------------------------------------------------------------------------------- | | Zoom | ✓ Supported | None | | Microsoft Teams | ✓ Supported | The Scribe Agent cannot join meetings and webinars that require registration or CAPTCHA verification. | | Google Meet | ✓ Supported | None | ## Requirements To ensure the Scribe Agent transcribes and delivers meeting summaries, you require: - **PagerDuty AI Actions**: Your account must have available PagerDuty AI [AI Actions](/ai-automation/advance#how-many-ai-actions-does-each-action-type-cost) or the add-on enabled. Without credits, you cannot use the Scribe Agent. - **A supported meeting platform**: You must initiate a valid meeting in Zoom, Microsoft Teams, or Google Meet for the Scribe Agent to join. If you use automated mechanisms, you must link a valid meeting to the PagerDuty incident for the Scribe Agent to join without human intervention. > **Chat surface configuration requirement:** As of July 23, 2026, Scribe Agent no longer requires a chat surface to join incident conference bridges. This means meeting transcripts are now collected and used automatically for summary generation, analysis by Paige (PagerDuty's SRE Agent), and Post-Incident Review — even without a configured chat surface. > > **Note:** Scribe Agent transcripts and summaries are not displayed anywhere by default. To make them visible to your team, configure a chat surface ([Slack](/integrations/slack-integration-guide/slack-user-guide) or [Microsoft Teams](/integrations/microsoft-teams)) and a notification or dedicated incident channel. ### Role Requirements | Action | Required Role | | :------------------------------------------- | :-------------------------------------------------------------------------- | | Enable Scribe Agent and connect integrations | PagerDuty Admin, or Account Owner | | Add Scribe Agent to meetings | Any user with a linked PagerDuty ↔ chat app account | See our [Slack User Guide](/integrations/slack-integration-guide/slack-user-guide#link-user-accounts) or [Microsoft Teams Integration Guide](/integrations/microsoft-teams#link-pagerduty-and-microsoft-teams-user-accounts) for instructions on linking accounts. ## Initial Configuration Scribe Agent configuration is a two-step process: **Admin setup** — An admin enables the Scribe Agent and configures the required integrations.
**User setup** — You can then add the Scribe Agent to your meetings. ### Step 1 - Video Conferencing Platform Setup Zoom and Microsoft Teams require initial configuration, while Google Meet meetings work without additional setup steps. #### Zoom Configuration 1. Sign in to the [Zoom web portal](https://zoom.us/signin). 2. In the navigation menu, navigate to **Settings** → **Meeting** tab. 3. Under **In Meeting (Advanced)**, click the **Automated captions** toggle to enable it. 4. On the verification prompt, click **Enable**. 5. Under **Security**, ensure that the **Only authenticated users can join meetings…** toggle is disabled. ![Automated captions toggle for Zoom meetings](/images/kb/f66ce5044505c03d2bac87bb5a50c41b85e9a82f11bd95860b242b93dc9e5042-scribe-agent-zoom-automated-captions.png) *Automated captions toggle for Zoom meetings*
![Authentication toggle to allow users to join Zoom meetings](/images/kb/d4d8f23fb8d92c1e4f80f3a0536d953928b5ab7a294a2d9137893a7edb512e47-scribe-agent-zoom-external-users.png) *Authentication toggle to allow users to join Zoom meetings* > **Configuration Note:** Zoom administrators can also enable these settings for a group of users or for all users in your account. Visit these Zoom resources for more information: > > - [Enabling automated captions](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0058810) > - [Configuring authentication settings and profiles](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0061263) > - [Allowing only authenticated users in meetings](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0063018) 6. To automatically add the Scribe Agent using incident workflows or the auto launch feature, install the [Zoom | PagerDuty](/integrations/zoom-integration-guide) integration. If you plan to add the Scribe Agent manually using Slack or Microsoft Teams, skip this step. #### Microsoft Teams Configuration 1. To automatically add the Scribe Agent using incident workflows or the auto launch feature, install the [Microsoft Teams | PagerDuty](/integrations/microsoft-teams) integration. If you plan to add the Scribe Agent manually, skip this step. 2. Optional: By default, the Scribe Agent waits in the meeting lobby for manual admission. To allow the Scribe Agent to bypass the lobby and join meetings automatically, configure your Microsoft Teams organization settings. For more information, visit the Microsoft resource on [Using the lobby in Microsoft Teams meetings](https://support.microsoft.com/en-us/office/using-the-lobby-in-microsoft-teams-meetings-eaf70322-d771-4043-b595-b40794bac057). #### Google Meet Configuration 1. To automatically add the Scribe Agent using incident workflows or the auto launch feature, set up a workspace connection to your [Google Workspace](/integrations/google-workspace-integration-guide). If you plan to add the Scribe Agent manually, skip this step. ### Step 2 - PagerDuty Configuration Follow these steps to complete the PagerDuty setup: 1. Connect a Chat Integration: - [Connect PagerDuty AI to Slack](/ai-automation/advance#connect-pagerduty-ai-to-slack), or - [Connect PagerDuty AI to Microsoft Teams](/ai-automation/advance#connect-pagerduty-ai-to-microsoft-teams) 2) **Enable the Scribe Agent**: Navigate to [AI Settings](/ai-automation/advance#2-enable-or-disable-ai-agents) and enable the Scribe Agent. > **EU Data Region:** In the EU data region, the Scribe Agent is **enabled by default**. In the US data region, you must enable it manually using this step. 3) _Optional:_ **Disable auto launch**. When the Scribe Agent is enabled, auto launch is on by default, so the agent is added automatically to every incident meeting. To stop the Scribe Agent from joining every incident meeting automatically: 1. Click **Configure** next to the Scribe Agent. 2. Click the **Automatically launch Scribe Agent** toggle to disable it. 3. Click **Save**. ![Scribe Agent card in AI Settings](/images/kb/2689c463f418d992b6fa1c4f06f685bf42031cdb851b571ac6fb6caffc13ba31-scribe-agent-settings-card.png) *Scribe Agent card in AI Settings*
![Automatically launch Scribe Agent with a PagerDuty incident toggle](/images/kb/ec01fada7e073fc2ed1e5e19c8f9dcb414b6a8fcb633e1ffbeab378d27339450-scribe-agent-settings-global-toggle.png) *Automatically launch Scribe Agent with a PagerDuty incident toggle* ## Add the Scribe Agent to a Meeting Once an administrator completes the initial configuration you can add the Scribe Agent to your incident meetings. > **Scribe Agent Limit:** Only one Scribe Agent can join and transcribe each incident meeting. When you remove the Scribe Agent from a meeting, you can add it back to that same meeting if needed. > > You can have up to 10 Scribe Agents simultaneously transcribing across different meetings. ### Add the Scribe Agent Once Scribe Agent is enabled you can add it to your meetings using these methods: - Automatically - [Auto Launch Feature](#using-the-auto-launch-feature) - [Incident Workflows](#using-incident-workflows) - Manually - [Slack or Microsoft Teams](#using-slack-or-microsoft-teams) #### Using the Auto Launch Feature > **Requirements:** To add the Scribe Agent to your incidents using the auto launch feature, you require a valid meeting linked to the incident. > > We also recommend setting up a dedicated incident channel (or service mapping) in your preferred chat surface so your team can see the live transcript and meeting summary. With the **Automatically launch Scribe Agent** toggle enabled: - A participant must join the incident meeting within 15 minutes of setting the incident [conference bridge](/incident-management/incidents/conference-bridge) meeting URL for the Scribe Agent to automatically join. - If no one joins the incident meeting within 15 minutes, the Scribe Agent does not join automatically. You can still add the Scribe Agent to the meeting [using Slack or Microsoft Teams](#using-slack-or-microsoft-teams) or by manually running an incident workflow. #### Using Incident Workflows > **Requirements:** To add the Scribe Agent to your incidents using the auto launch feature, you require a valid meeting linked to the incident. > > We also recommend setting up a dedicated incident channel (or service mapping) in your preferred chat surface so your team can see the live transcript and meeting summary. > > When using incident workflows, including the steps to create the incident conference bridge, dedicated channel, and add Scribe Agent within the same workflow is recommended to ensure you satisfy all requirements. You can add the Scribe Agent to incident meetings via incident workflows, which provide precise control over when the agent is added based on your trigger conditions (for example, incident creation, priority changed to P1, or triggering only for major incidents). Because auto launch is enabled by default, **disable the [Automatically launch Scribe Agent](#step-2---pagerduty-configuration) toggle to avoid redundancy.** For detailed instructions about adding the Scribe Agent via incident workflows, read our [Add PagerDuty AI Scribe Agent](/workflow-actions/pagerduty-advance/add-pagerduty-advance-scribe-agent) workflow action article. When the **Add PagerDuty AI Scribe Agent** workflow action runs: - A participant must join the incident meeting within 15 minutes of setting the incident [conference bridge](/incident-management/incidents/conference-bridge) meeting URL for the Scribe Agent to automatically join. - If no one joins the incident meeting within 15 minutes, the Scribe Agent does not join automatically. You can still add the Scribe Agent to the meeting [using Slack or Microsoft Teams](#using-slack-or-microsoft-teams) or by manually running an incident workflow. #### Using Slack or Microsoft Teams > **Requirements:** To add the Scribe Agent, you must first link your PagerDuty and chat app user accounts. > See our [Slack User Guide](/integrations/slack-integration-guide/slack-user-guide#link-user-accounts) and [Microsoft Teams Integration Guide](/integrations/microsoft-teams#link-pagerduty-and-microsoft-teams-user-accounts) for more information on linking user accounts. 1. In your chat app, navigate to a channel linked to an incident. 2. Complete one of the following actions: - Type the `scribe` command: - Slack: `/pd scribe` - Microsoft Teams: `@PagerDuty advance scribe` - Click **Add Scribe Agent to meeting**. This button appears when the linked incident has a [conference bridge](/incident-management/incidents/conference-bridge) meeting URL. > **Transcript Association:** When you click **Add Scribe Agent to meeting** for a specific incident, all transcripts and meeting summaries from the Scribe Agent link to that incident only. 3. On the **Add Scribe Agent** modal, the incident meeting URL populates automatically. You can modify the URL if needed. 4. Ensure that the meeting URL includes the passcode for the meeting. 5. Click **Add**. ### Next Steps With the Scribe Agent properly configured, the agent is ready to join your incident meetings. #### During the Meeting The Scribe Agent sends live transcripts directly to your channel meeting thread unless a PagerDuty administrator disables this preference or you don't have a channel mapped to the incident. Meeting hosts can change the transcript language through the caption settings of the video conferencing tool. The agent also monitors meeting participation by sending messages when participants join or leave. It maintains an updated participant list on the initial "A meeting transcript has started for \<your incident>" message. > **Enhanced Transcript:** The Scribe Agent uses Enhanced Transcript, which elevates the quality and readability of automated transcripts from incident-related conference bridges. It removes filler words, redundant statements, and profanity, while preserving what was said, decided, and by whom — producing transcripts that are easier to follow and provide higher-quality context for AI-drafted status updates and post-incident review summaries. Enhanced Transcript applies to all supported meeting platforms (Zoom, Microsoft Teams, and Google Meet). #### After the Meeting When the meeting ends or the host [removes the Scribe Agent](#remove-the-scribe-agent-from-a-meeting) from the meeting, the Scribe Agent posts a comprehensive meeting summary to the mapped channel (if one exists). This includes key discussion points, action items, next steps, and a complete list of all participants who attended the meeting. For longer meetings, the summary can take extra time to generate. > **Operational Note:** While transcripts sent during the meeting are audio-only, the final meeting summary captures both audio and chat content. ## Remove the Scribe Agent from a Meeting You can remove the Scribe Agent from a meeting at any time. ### As the Meeting Host **Zoom** 1. In Zoom, hover over the Scribe Agent and click the overflow menu. 2. Click **Remove**. **Microsoft Teams** 1. In Microsoft Teams, click the **People** icon to view the meeting participants. 2. Click the overflow menu next to the Scribe Agent. 3. Click **Remove from meeting**. **Google Meet** 1. In Google Meet, click the **People** icon to view the meeting participants. 2. Click the overflow menu next to the Scribe Agent. 3. Click **Remove from the call**. ### If You Are Not the Meeting Host 1. In your chat app, locate the initial message from the Scribe Agent that reads "A meeting transcript has started for \<your incident>." 2. Click **Remove Scribe Agent**. ## Hide Transcripts in Chat Platform By default, the Scribe Agent sends the meeting conference details to Slack or Microsoft Teams, but you can choose not to receive this data if it does not offer added value. In the AI Agents Console, locate the Scribe Agent configuration and disable the **Send transcripts to chat surface** toggle. ![Send transcripts to chat surface toggle](/images/kb/8f62bd58578bd9ff751ee552b5422b02d2ebfa86ed3e994232f3ce8c1161e86f-Trigger_Scribe_Agent.png) *Send transcripts to chat surface toggle* ## Disable Scribe Agent Disable the Scribe Agent by toggling its switch to the **off** position on the [AI Settings](/ai-automation/advance#2-enable-or-disable-ai-agents) page. ## FAQ **How do I get more compliance, legal, privacy, or security information about the Scribe Agent?** You can read the [PagerDuty Advance AI Disclosure](/ai-automation/advance#pagerduty-advance-ai-disclosure) to learn more about how PagerDuty designed, built, and assessed PagerDuty AI with mission-critical work in mind. **I have added the Scribe Agent to my Zoom meeting. Why is it not able to join the meeting?** The meeting host must configure the [required Zoom settings](#zoom-configuration) before the Scribe Agent can join the host's meetings. **The Scribe Agent has joined my Zoom meeting. Why is it not sending transcripts to my channel?** The meeting host must configure the [required Zoom settings](#zoom-configuration) before the Scribe Agent can start transcribing. If Zoom settings are already configured, check if the Scribe Agent is configured to send transcripts to the chat platform at all and/or if there is a chat surface configured with a channel properly mapped to the incident. **Does the Scribe Agent provide word-for-word verbatim transcripts?** The Scribe Agent uses Enhanced Transcript, which improves transcript quality and readability by removing filler words, redundant statements, and profanity, while preserving what was said, decided, and by whom. Enhanced Transcript is the standard format for all Scribe Agent transcripts, across all supported meeting platforms. **Why does the Scribe Agent show as "Unverified" in my Microsoft Teams meeting?** The Scribe Agent appears as "Unverified" in Microsoft Teams due to Microsoft's February 2024 update, which automatically labels participants based on their relationship to the meeting organizer's organization. Since the Scribe Agent is a bot without an established trust relationship with your organization, Microsoft Teams assigns it the "unverified" label by default. This labeling is purely cosmetic and does not affect the agent's functionality — it still transcribes and summarizes your meeting normally. **Can the Scribe Agent help with status updates and post-incident reviews?** Yes, the Scribe Agent can assist with both: - **Status updates**: The Scribe Agent's meeting transcripts are used as context to generate status updates. - **Post-Incident Reviews**: The Scribe Agent's meeting transcripts provide context for "wrap me up" prompts, and these summaries can be used to create post-incident reviews. **What happens if I do not have PagerDuty AI Actions?** Without available [AI Actions](/ai-automation/advance#how-many-ai-actions-does-each-action-type-cost) or the PagerDuty AI add-on, you cannot use the Scribe Agent. Contact your account administrator or PagerDuty sales to add AI Actions to your account.
--- URL: https://docs.pagerduty.com/ai-automation/advance/shift-agent # Shift Agent Eliminate manual on-call management and ensure seamless coverage Shift Agent brings AI-powered automation to on-call schedule management in PagerDuty. Designed for on-call managers, team leads, and incident responders, it monitors calendars, detects potential conflicts, identifies qualified replacements, and coordinates schedule changes without manual intervention. By automating these traditionally manual tasks, Shift Agent helps ensure reliable operational coverage. By default, Shift Agent activates for all customers who enable [PagerDuty AI](/ai-automation/advance) with the [Slack](/integrations/slack-integration-guide) integration. > **Availability:** This feature is included with PD Reliability Platform plans. It's also available as PagerDuty Advance on Professional, Business, and Enterprise plans. > > [Contact our Sales Team](mailto:sales@pagerduty.com) if you would like to upgrade to a plan featuring PagerDuty AI. > **Required User Permissions:** - [PagerDuty AI](/ai-automation/advance) permissions for configuration are the same across all agents. After the required permissions are accepted, any user can interact with the Shift Agent. > - An Admin or the Account Owner can configure the Google Calendar Extension. ## Configure Shift Agent Shift Agent has two primary functions: - [Intelligent Conflict Detection](#intelligent-conflict-detection) - [Extension for Google Calendar](#extension-for-google-calendar) ### Intelligent Conflict Detection Shift Agent is an AI-powered scheduling assistant that automatically manages on-call coverage conflicts. It monitors responder calendars, detects scheduling conflicts, and coordinates coverage changes without manual intervention. By automating these traditionally time-consuming tasks, Shift Agent eliminates coverage gaps, reduces scheduling stress, and ensures operational readiness. 1. Configure and enable [PagerDuty AI](/ai-automation/advance) in a chat integration (for example, [Slack](/integrations/slack-integration-guide)). 2. Ensure users have appropriate permissions to manage [on-call schedules](/incident-management/schedules/schedule-basics#create-a-schedule) and [integrations](/incident-management/services/services-and-integrations). 3. Shift Agent only detects conflicts on schedules configured on [Level 1 of an escalation policy](/incident-management/schedules/escalation-policies-and-schedules#connect-a-schedule-to-a-service-via-escalation-policy) in order to reduce noise. Ensure any schedule you want included in conflict detection is on Level 1 of an escalation policy. ### Extension for Google Calendar The Google Calendar Extension automatically syncs your calendar events with PagerDuty, allowing Shift Agent to detect out-of-office conflicts before they impact coverage. This integration reduces the need for manual availability updates and helps maintain operational continuity while respecting responders' scheduled commitments. [Learn more](/incident-management/schedules/google-calendar-extension) on setting up your Google Calendar Extension. ## Disable Shift Agent You can disable the Shift Agent by toggling its switch to the **off** position on the [AI Settings](/ai-automation/advance#2-enable-or-disable-ai-agents) page. ## User Guide ### Check Responder Availability In a [PagerDuty AI](/ai-automation/advance) chat, enter a message such as, `I am on vacation June 13. Do I have a conflict?`. Depending on your availability, PagerDuty AI offers contextual suggestions, such as **Create override manually** or **Find coverage**. ![Chat message asking about a vacation conflict, with suggested reply buttons for Create override manually and Find coverage](/images/kb/29f92e8fe74bb359e560ed862844bbdbc19b4f7fc2bf8cf4e0ef799e9fc7cc4c-responder_availability.webp) *Check responder availability* ### Request Coverage Shift Agent can automatically find a replacement for an on-call shift. Click **Request coverage** to reach out to suggested candidates. They receive a message based on their [configured notification rules](#configure-notification-rules). ![A screenshot of the Slack UI showing potential coverage candidates and the option to message them](/images/kb/e707bde9ea21831d85c4248910221222fc74ddf0371ef3822459d1f6a17b9fc8-request_coverage.png) *Request coverage* You receive an update once a candidate accepts the shift. Shift Agent automatically updates on-call schedules and maintains a record of all changes. Shift Agent gives responders 24 hours to respond. This 24-hour period does not include Saturday or Sunday. After the period times out, or after all candidates decline, you will also receive a notification. ### Configure Notification Rules Users can configure their [Notification Rules](/account-admin/user-profile/notification-rules) to customize how Shift Agent contacts them. > **Slack Notifications:** When you link your PagerDuty user account with Slack, PagerDuty attempts to automatically create notification rules for [shift conflicts](#shift-conflicts) and [shift coverage requests](#shift-coverage-requests). If you have connected more than one Slack workspace, PagerDuty uses the most recently-added workspace. > > You can review and customize your [Notification Rules](/account-admin/user-profile/notification-rules) at any time. If you are not receiving notifications as expected, check your [User Profile](/account-admin/user-profile) to make sure the preferred Slack workspace is selected to receive notifications, or add a workspace if none is currently configured. #### Shift Conflicts PagerDuty automatically adds a notification rule to users' profiles when the Google Calendar extension is enabled in the account. To edit this setting: 1. Navigate to **User Icon** → **My Profile** and select the **Notification Rules** tab. 2. Under **When I have an upcoming shift conflict, contact me via**, click to edit _or_ to remove the notification rule. 3. Make the required changes and click **Save**. #### Shift Coverage Requests All PagerDuty AI users have a notification rule for when they receive a shift coverage request. You can edit this notification rule (i.e., change the selected workspace), however you cannot delete it. 1. Navigate to **User Icon** → **My Profile** and select the **Notification Rules** tab. 2. Under **When I am sent a shift coverage request, contact me via**, click . 3. Make the required changes and click **Save**. ## FAQ **How many AI Actions does the Shift Agent use?** Shift Agent is included at no additional cost and does not consume AI Actions. ## Demo Video Watch this demo to see the Shift Agent in action. [https://www.youtube.com/watch?v=zu-MsGM0T94](https://www.youtube.com/watch?v=zu-MsGM0T94) --- URL: https://docs.pagerduty.com/ai-automation/advance/sre-agent # Paige (SRE Agent) A continuously learning agent to help rapidly diagnose, troubleshoot, and remediate issues > **Availability:** To access Paige within the **PD Reliability or Operations Console**, you must have [AIOps](/ai-automation/aiops/overview) and [PagerDuty AI](/ai-automation/advance). To access Paige in **Slack** or the **incident details page**, you must have [PagerDuty AI](/ai-automation/advance). > > PagerDuty AI is included with PD Reliability Platform plans. It's also available through one-time AI Actions or as an add-on with the following pricing plans: > > - Enterprise > - Business > - Professional > > Contact our [Sales Team](https://www.pagerduty.com/contact-us/#contact-sales) to upgrade to a pricing plan that includes this feature. > **PagerDuty Advance Disclosure:** Read our [PagerDuty Advance AI Disclosure](/ai-automation/advance#pagerduty-advance-ai-disclosure) for more information about how PagerDuty designed, built, and assessed PagerDuty AI with mission-critical work in mind. ## Overview When an incident fires, responders often spend the first critical minutes doing the same repetitive work: hunting down the right runbook, pulling logs from multiple tools, piecing together whether this has happened before. Paige, PagerDuty's SRE Agent, works alongside you to handle that toil automatically — ingesting event data, runbooks, and logs to build an understanding of the incident's scope and likely cause, then recommending remediation actions so your team can focus on resolution. Every incident Paige participates in contributes to its memory, so investigations get faster and more accurate over time. ## Key Features - Ingest and analyze your runbooks, SOPs, and diagnostics (for example, error logs) - Generate and save playbooks for recurring issues - Prioritize actions by urgency and impact - Surface likely root causes from available data - Recommend diagnostic and remediation steps - Detect patterns; recall similar incidents and past resolutions - Provide structured troubleshooting for incidents, services, and infrastructure - Organize context into actionable views with interactive nudges and buttons - Summarize conversations and inputs, mark resolved, and save learnings > **PagerDuty AI Actions:** Accounts with PagerDuty AI have an allotment of AI Actions at their disposal. Paige uses four AI Actions whenever you: > > - Submit a request to Paige via Slack or the **Operations Console** (for example, "what are my past incidents," "what is the likely root cause"). > - Click a nudge button (for example, **Update a Runbook**, **Analyze Past Incidents**). > > Refer to [How many AI Actions does each action cost](/ai-automation/advance#how-many-ai-actions-does-each-action-type-cost) for more information. ## Use Paige After [configuring PagerDuty AI](/ai-automation/advance), you can access Paige through either: - [The Operations Console](#in-the-operations-console) or the [PD Reliability Console](/ai-automation/aiops/pd-reliability-console) (Depending on your plan) - [The Incident Details Page](#in-incident-details) - [Slack](#in-slack) - [MS Teams (Currently in Early Access)](#in-ms-teams) > **Paige Virtual Responder:** Currently in Early Access, you can deploy Paige as a virtual responder so it begins investigating the moment an incident triggers. Configure it in one of two ways: > > - [Trigger via Incident Workflow](/ai-automation/advance/add-paige-as-virtual-responder) — deploy Paige as a virtual responder in either Slack or the PagerDuty web app. > - [Trigger via Escalation Policy](/ai-automation/advance/trigger-paige-via-escalation-policy) — add Paige to an escalation level so it investigates in parallel with your on-call responders. ### In the Operations Console 1. In the PagerDuty web app, navigate to **AIOps** → **Operations Console**. - _Optional:_ To add the **Paige** column to the **Operations Console** as a default column for faster incident triage: ![Paige Column in Operations Console](/images/kb/40c7e374fd30af34a3df5272f542000368f5015a0e387beddb41dbfa1298dd48-SRE_Agent_in_Ops_Console.png) *Paige Column in the Operations Console* 2. Click the incident **Title**. 3. Select the **Paige** tab and wait for the agent to load the incident summary and suggest next steps. 4. Ask questions and provide information to begin troubleshooting the incident with the agent. Refer to [Example Questions](#example-questions) for examples. 5. Click Paige's nudges or buttons to take prescribed actions during the conversation (for example, **Upload a service runbook**). 6. Add an attachment to upload additional files. ### In Incident Details 1. In the PagerDuty web app, navigate to an open incident. 2. On the right side of the incident details page, select the **Paige** tab and wait for the agent to load the incident summary and suggest next steps. 3. Ask questions and provide information to begin troubleshooting the incident with the agent. Refer to [Example Questions](#example-questions) for examples. 4. Click Paige's nudges or buttons to take prescribed actions during the conversation (for example, **Upload a service runbook**). 5. Add an attachment to upload additional files. ### In Slack > **Before You Begin:** You must configure Slack with Paige. Refer to our instructions to [Configure the Slack Integration](/integrations/slack-integration-guide) and [Connect PagerDuty AI to Slack](/ai-automation/advance#connect-pagerduty-ai-to-slack) if you have not already done so. > **Note:** If you do not have PagerDuty AIOps, you can still access certain PagerDuty AIOps information, such as related incidents, past incidents, change events, and outlier incidents, but only within the Slack chat interface. This information is not available outside of the agent chat interface in Slack (for example, in the incident management web app). > **Required Scopes:** Paige requires [additional scopes](/integrations/slack-integration-guide#app-permissions) to work with Slack. A PagerDuty admin may need to [reauthorize the Slack integration](/integrations/slack-integration-guide#approve-app-update) to grant these scopes. 1. Access Paige in one of the following channel types: - Dedicated incident channels - Team-based or service-based Slack channels 2. To start Paige, perform one of the following actions: 1. Click the **Paige Triage** button. 2. Ask questions in the chat using `@pagerduty` followed by a question related to the incident. Refer to [Example Questions](#example-questions) for examples. 3. To upload a file to Paige in Slack: 1. Click the **Upload Runbook** or **Update Runbook** button. 2. Follow the prompts and select the runbook to upload. 3. Click **Submit**. ![Slack channel showing the Paige Triage button and a chat conversation with Paige about an incident](/images/kb/13f86634c08b509949154791694be0cd9b6e15724b6cba9c55b4cacf74c211d0-SRE_Agent.png) *Slack Interface with Paige* ### In MS Teams > **Before You Begin:** Paige in MS Teams is currently in [Early Access](https://www.pagerduty.com/early-access/). You must configure MS Teams with PagerDuty AI and have Paige enabled. Refer to our instructions on how to [Connect PagerDuty AI to MS Teams](/ai-automation/advance#connect-pagerduty-ai-to-microsoft-teams) if you have not already done so. Once configured, you can interact with Paige by typing `@pagerduty` followed by your question in the chat. Refer to [Example Questions](#example-questions) to get started. ## Integrations Paige can retrieve log data from observability platforms such as Grafana, Datadog, New Relic, and AWS CloudWatch, and runbooks from sources such as Confluence and GitHub. By analyzing these logs and runbooks, Paige guides responders through investigation, triage, and resolution. When setting up one of these [workflow integrations](/ai-automation/automation/incident-workflows/workflow-integrations), select **Allow Paige access** to use this connection. ![A screenshot showing the option to allow Paige access](/images/kb/22c5b753ee98684826105a3c2dcc0ca1cef73f17eee828aad8ee7316aa9e7230-Allow_SRE_Agent.png) *Allow Paige Access* > **Setting Up an Integration:** For more information on setting up Paige integrations, view [Paige: Connectors and Skills](/ai-automation/advance/connectors-tools-and-skills). ## Supported Actions Paige uses nudges to recommend supported actions such as: - **Upload Runbook**: For first-time setup on a service. - **Update Runbook**: When a runbook already exists. - **Analyze Past Incidents**: Review history and patterns. - **Analyze Related Incidents**: Identify correlations and impact. - **Generate a Playbook**: Create repeatable response steps. - **Check Change Events**: Verify recent changes for possible cause. - **Search Logs**: Check logs based on tooling setup. - **Update Memory**: After incident resolution, save new information to Paige's memory. ## Incident Notes Paige analyzes new notes posted during active incidents, where you can see them in: - **Slack**: Posts analysis of new incident notes. - **Operations Console**: Posts each new note in chat with interpretation. You can disable proactive note messages on the **AI Settings** page. You can ask questions in the chat about recent notes. ### Example Questions The following questions are representative of the types of questions Paige can answer. Paige leverages large language models where questions do not have to be provided in the exact text format shown below. | Example Question to Paige | Description | | :------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------ | | Can you analyze past incidents to see how this was resolved before? | Ability to see what similar incidents occurred previously for that service. | | Can you provide a list of related incidents? | Ability to see what active incidents might be related on services that are not your service. | | How do I check \[insert service, infrastructure information] for this specific error? | Ability to ask questions related to the type of incident you are troubleshooting. | | What information should I gather for this incident to help troubleshoot? | Ability to understand what type of information is needed to troubleshoot the incident. | | Should I do step X or step Y first to troubleshoot this incident? | From the list of suggested next steps, the agent recommends which step to take first, with additional context on its reasoning. | | How urgent is this incident based on the data? | Ability to understand incident urgency. | | What steps should I take to troubleshoot this issue? | Suggested remediation steps. | | Can you generate a playbook for resolving this error? | Paige develops a playbook based on its understanding of the incident. | | How do I check the logs for this specific error? | Instructions for checking logs, which may include a sample query. | | How can I prevent this error from recurring? | Suggestions on how to improve the incident for the future, such as service or infrastructure improvements. | | Is there a pattern to when these errors occur? | Analysis of incident patterns. | | What is the impact of this error on our systems? | Potential impact on other related services or infrastructure based on the incident context. | | What are some likely root causes for this incident? | Suggested root-cause for the incident. | ## Paige's Capabilities Here is a look at the specific capabilities Paige uses to investigate and manage incidents: - `get_incident_details` - Look up incidents by ID or number (includes recent notes, changes, status updates). - `list_incidents` - Query incidents by service, team, user, or filters. - `add_incident_note` - Add a note to the current incident. - `get_service_details` - Retrieve service info by ID or name. - `get_related_services` - Get upstream and downstream service dependencies. ## Paige Memory Definitions Paige maintains several types of memory to provide increasingly relevant and personalized assistance over time. All of Paige's memory artifacts are scoped to a given PagerDuty service. Understanding these memory types in the following sections helps you leverage the full capabilities of the agent. ### Memory API To update or redact information, see the [Paige Memory API documentation](/developer/api/reference/rest/sre-agent/update-sre-memory). The Paige Memory API provides visibility and control over the memory artifacts maintained by Paige for each PagerDuty service. Paige uses multiple types of memory to deliver increasingly personalized and context-aware assistance over time, helping teams resolve incidents faster and with greater accuracy. With the Memory API, you can: - View all of Paige's memory artifacts associated with a given service or incident. - Update or redact sensitive or outdated information to improve the accuracy and compliance of Paige's insights. - Leverage the API to make edits or redactions at human speed, not machine speed, ensuring timely, manual oversight where needed. - Enhance transparency into how Paige builds memories from operational data to deliver more relevant recommendations. ### SRE Incident Playbook ("Scratchpad") - Continuously learns from your organization's historical incident data. - Automatically generates prioritized resolution steps tailored to your environment by analyzing patterns from past incidents. - Provides AI-powered baseline recommendations, even for novel incidents. - Delivers context-aware troubleshooting guidance that improves with each resolved incident. ### Customer Service Runbook - Stores and references your runbooks, SOPs, and documentation (for example, Confluence or GitHub pages). - Remembers manually provided documentation for future conversations. - Recommends steps that align with your organization's established procedures and standards. ### Incident Summarization - Automatically creates comprehensive summaries when incidents are marked complete. - Captures key learnings, resolution details, and troubleshooting paths without manual documentation effort. - Builds an ever-growing repository of institutional knowledge that benefits future incident response. ### Service Profile - Metadata Paige has observed about a given service via customer runbook, event payload data, and user interactions. - Examples include cloud providers, region, service type, and relevant log search queries for a given service. ## Recommended Workflows Paige helps streamline incident response by analyzing configured incident workflows and recommending the most relevant options based on the real-time context of each incident. [Click here](/ai-automation/advance/paige-recommended-workflows) for more information on recommended workflows. ## Best Practices Use these quick tips to get the most from Paige — share context fast, collaborate in triage, and improve outcomes over time. ### Provide Relevant Documentation and Context Upload any runbooks, SOPs, or knowledge base articles related to the affected service or architecture so everyone has the right context. ### Resolve Incidents Paige recalls key information observed during an incident including event payload information, key user interactions, log search queries, and other data that is useful for future similar incidents. Incidents _must be resolved_ to prompt Paige to save information into memory. If you interact with Paige post incident resolution, click the **Update Memory** button to prompt Paige to save additional information for future incidents. ### Interact with Paige Treat Paige like a triage partner and ask questions when you encounter difficulties. Share any critical findings or remediation steps you have taken during the incident so Paige stays informed and learns over time. ### Provide Performance Feedback Report whether each suggested troubleshooting step was a success or a failure. If a step fails, inform Paige so it can suggest alternative actions and keep the triage moving forward. ### Generate Incident Playbooks At the end of each incident, request a summary playbook. Review it for accuracy and completeness, then copy the approved version to your knowledge base for future use. ### Add Runbooks Structure runbooks one per service with SOPs based on incident types or scenarios. Optionally include log queries to help Paige build better searches. ### Know Product Limits Paige analyzes `custom_details` and notes, but only up to the first 2,000 characters of each. Content beyond that limit is not included. ### Rate AI Responses Click the **Rate AI Response** button next to each suggestion or recommendation in the conversation. Provide feedback to help improve the product and future recommendations. Your input helps the system learn and deliver better assistance over time. ![Thumbs up and thumbs down icons displayed next to an SRE Agent suggestion in the conversation](/images/kb/595ea3ce6cbe5ebdeec9025f935e2233f8592665d6b1acc07c79d5ae811164e4-Rate_AI_Response.png) *Rate AI Response Button* ## FAQ **What incident data can Paige analyze?** Paige analyzes: - Event and alert payload information - Historical and related incidents - Change events - User-provided data (runbooks, logs, documentation) **Current limitations**: Paige has limited access to incident timeline details, incident workflows, and alert grouping data. These features will be added in future releases to enhance Paige's capabilities. **What happens if a recommendation or incident summary is not correct?** Interact with the agent and state that the suggestion provided was not helpful, why it was not helpful, and ask for an alternative recommendation. You should also rate the response for the recommendation, which is analyzed to improve future recommendations. **What file types and limits exist for file upload?** - PagerDuty currently supports `.txt`, `.pdf`, and `.md` files. - PagerDuty currently supports `.jpg` and `.png` for image analysis. - One conversation can contain up to a total of 25 files, with each file being 100 Kb maximum. **What ways can Paige fetch links?** Paige automatically fetches runbook URLs from the event payload. You can also ask it to: - Fetch specific runbook links from Knowledge Base tools (including embedded links within pages) - Conduct log searches via nudge (button) or chat command **How does Paige save time?** Paige transforms incident response by replacing manual, time-consuming investigation steps with automated, intelligent actions. Here is a comparison of your workflow before and after using Paige: | Manual Workflow (Before) | Paige Workflow (After) | | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Hunting for Documentation**: You search across multiple systems for the correct SOPs and runbooks. | **Runbook Integration**: The agent ingests your existing SOPs, integrates with tools that link to runbooks, and automatically generates new runbooks. | | **Manual Log Retrieval**: You log into multiple third-party tools to manually search, view, and retrieve error logs and diagnostics. | **Automated Analysis**: The agent integrates with third-party tools to automatically retrieve, ingest, and analyze diagnostics and error logs. | | **Guessing Next Steps**: You manually prioritize tasks and determine the necessary troubleshooting steps. | **Guided Remediation**: The agent prioritizes actions by urgency and impact, recommends diagnostic and remediation steps, and provides structured troubleshooting for incidents, services, and infrastructure. | | **Fragmented Context**: You spend critical minutes piecing together context and searching for the root cause. | **Instant Context**: The agent surfaces likely root causes from available data and organizes context into actionable views with interactive buttons and nudges. | | **Relying on Human Memory**: You try to remember if a similar incident happened in the past and how your team resolved it. | **Pattern Detection**: The agent detects patterns and automatically recalls similar past incidents and their resolutions. | | **Manual Wrap-Up**: You spend time writing summaries, documenting recurring issues, and manually resolving the incident. | **Automated Wrap-Up**: The agent summarizes conversations and inputs, marks the incident resolved, saves learnings, and generates and saves playbooks for recurring issues. | --- URL: https://docs.pagerduty.com/ai-automation/advance/trigger-paige-via-escalation-policy # Trigger Paige via Escalation Policy Add Paige to an escalation level so it investigates in parallel with your on-call responders > **Early Access:** This feature is currently in [Early Access](https://www.pagerduty.com/early-access/) and subject to change. Add Paige, PagerDuty's SRE Agent, to an escalation level to put it on call as a virtual responder, in parallel with your human responders — not in place of them. The moment an incident triggers, Paige begins investigating alongside whoever is paged next in your escalation chain. It reviews the incident payload, checks how similar incidents were resolved in the past, and queries your connected integrations for relevant logs and runbooks. By the time a human responder opens the incident, Paige has already gathered context, investigated likely causes, and — where available — recommended a workflow with its reasoning attached. The human is never blocked waiting on Paige, and Paige never blocks waiting on a human; both start working the moment the incident fires. ## Prerequisites - Paige is enabled for your PagerDuty account. - You have a Manager or Admin role, which is required to edit escalation policies. ## Add Paige to an Escalation Policy 1. Navigate to the escalation policy you want to configure and open it. 2. Select the escalation level where you want Paige to engage. Paige triggers immediately after the incident is created, in parallel with that level's on-call responder. 3. Turn on **Trigger Paige for incidents in this escalation policy**. ![Trigger Paige toggle for escalation policy in PagerDuty UI](/images/kb/6a5c4bd5ff49c53619b418fd62ff489d26b9ebb2c1f3512c2b76343c18499cb4-Trigger_SRE_Agent.png) *Trigger Paige toggle* 4. Choose where Paige posts its findings. You can enable one or both destinations: - **Post in the Paige side panel in PagerDuty** — investigation results appear in the Paige panel on the incident. - **Post investigation results in Slack** — results post to the incident's dedicated Slack channel if one exists, or to the relevant team or service channel where the incident notification was posted. 5. Click **Save**. Once saved, every incident that reaches this escalation level triggers Paige automatically, with no manual assignment needed per incident. > **Good to Know:** - Paige does not replace a step in the escalation chain or delay paging; it runs concurrently with the humans in the policy. --- URL: https://docs.pagerduty.com/ai-automation/advance/user-guide # PagerDuty AI User Guide Use PagerDuty AI's features after configuration Once you have [configured PagerDuty AI](/ai-automation/advance), you can use the following features: > **Also known as PagerDuty Advance:** This capability is part of the PD Reliability Platform plan. If your organization is not on the PD Reliability Platform plan, you'll see it labeled PagerDuty Advance in your product and account. - [PagerDuty AI Assistant](#pagerduty-ai-assistant) - [PagerDuty AI for Post-Incident Reviews](#pagerduty-ai-for-post-incident-reviews) - [PagerDuty AI Slack Side Panel](#direct-messages-using-the-pagerduty-ai-slack-side-panel) - [PagerDuty AI Agents](#pagerduty-ai-agents) - [PagerDuty AI Integration for Amazon Q](#pagerduty-ai-integration-for-amazon-q) - [PagerDuty AI for Status Updates](#pagerduty-ai-for-status-updates) - [Periodic Incident Progress](#periodic-incident-progress-pip) - [PagerDuty AI for Automation Digest](#pagerduty-ai-for-automation-digest) - [PagerDuty AI Analytics](#pagerduty-ai-analytics) ## PagerDuty AI Assistant > **Availability:** PagerDuty AI Assistant is available in US and EU [service regions](/get-started/service-regions). > **Required User Permissions:** You can interact with the PagerDuty AI Assistant in Slack. 1. Navigate to the channel that is linked to the incident for questions directly related to a PagerDuty incident. For non-incident questions, navigate to any channel. 2. Mention the PagerDuty bot and enter your question to interact with the PagerDuty AI Assistant within the channel. 1. **In a Slack channel**: `@PagerDuty` <your question> 2. **In a Microsoft Teams channel**: `@PagerDuty advance` <your question> ### Prompt Examples | Category | Prompt Examples | | :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Incident Insight** | “Where are the alerts coming from?”
“What changed in the last 24h?”
“What is the probable cause?”
“Are any of the changes likely to be the cause of the incident?”
“Has this incident happened before?”
“What are the related services and their status?”
“Are there any open incidents for \{service name\}?”
“Who is on call? / Who is on call for \{service name\}?”
“What is the customer impact?” | | **Incident Summarization** | “What happened?”
“Catch me up on this incident”
“Generate a post-incident review” | | **Status Updates** | “Write me a status update message” | | **Planned Work** | “How do I set up \{PagerDuty feature\}?”
“What are the best practices for \{PagerDuty feature\}?”
“Why can I not add notes to a PagerDuty incident?”
“What questions can I ask PagerDuty AI?"
“What data is used to generate a status report?”
“Why are my Android notifications not showing up?”
“How can I set up an integration with Jira?” | To meet these requirements, the bot requires the ability to join the channel, send messages, and send URLs within the channel. ### PagerDuty AI for Post-Incident Reviews > **Availability:** - This feature is included with PD Reliability Platform plans. It's also generally available to Professional, Business, and Enterprise Incident Management accounts using PagerDuty AI (one-time AI Actions, trial, or add-on). > - This feature is only available in the US [service region](/get-started/service-regions). > **Requirements:** - If you have the role of Observer, Limited User, User, Admin, or Account Owner (or their respective [advanced permission base roles](/account-admin/advanced-permissions)), you can generate post-incident reviews. > - You must have a [dedicated incident channel](/integrations/slack-integration-guide/slack-user-guide#dedicated-incident-channel) or have at least one [Slack channel connection](/integrations/slack-integration-guide#configure-the-slack-integration) to a PagerDuty service. 1. Mention `@PagerDuty` and ask it, “what happened” once you resolve an incident in Slack or Microsoft Teams. 2. PagerDuty AI reviews the entire chat history and presents you with an executive summary, including what happened, actions, decisions, and the incident resolution. 3. Click **Create a Post-Incident Review** to import the PagerDuty AI summary into PagerDuty as a new post-incident review. You can edit the post-incident review within Jeli. 4. Jeli displays an indicator to show that the post-incident review is AI-generated. ### Direct Messages using the PagerDuty AI Slack Side Panel PagerDuty AI in the Slack side panel automatically understands which channel you are currently viewing and can access relevant information about any associated incidents. When you use the split view to examine an incident, the PagerDuty AI Assistant intelligently references that specific incident in its responses to your questions, ensuring more accurate and relevant assistance. This contextual understanding allows the PagerDuty AI Assistant to provide more targeted and helpful responses without requiring you to provide additional background information. To begin a conversation with the PagerDuty AI Assistant in the Slack side panel: 1. Click the **PagerDuty AI Slack side panel** logo on the top right corner of your Slack workspace. 2. Enter your question or request. ## PagerDuty AI Agents PagerDuty AI agents are purpose-built to help operations teams drive productivity and efficiency through every stage of the operations lifecycle. Visit these resources to learn about each agent's capabilities: - [Insights Agent](/ai-automation/advance/insights-agent) - [Shift Agent](/ai-automation/advance/shift-agent) - [Scribe Agent](/ai-automation/advance/scribe-agent) - [Paige (SRE Agent)](/ai-automation/advance/sre-agent) ## PagerDuty AI Integration for Amazon Q > **Requirements:** To begin using the integration, you must first link your PagerDuty and chat app user accounts. See our [Slack User Guide](/integrations/slack-integration-guide/slack-user-guide#link-user-accounts) or [Microsoft Teams Integration Guide](/integrations/microsoft-teams#link-pagerduty-and-microsoft-teams-user-accounts) for more information on linking user accounts. > **View Integration Summary:** From the PagerDuty AI incident context card, click the **Use Amazon Q** button to view a summary of the integration and its usage instructions. 1. You can use Amazon Q by typing the `amazonq` command and entering your question. 1. **In a Slack channel**: `/pd amazonq` <your question> 2. **In a Microsoft Teams channel**: `@PagerDuty amazonq` <your question> 2. If you have not authenticated with Amazon Q or your AWS session has expired, you receive a message prompting you to log into your company Identity Provider for AWS (for example, AWS IAM Identity Center, Okta, Entra, or Auth0). 1. Click **Link Accounts** to log into your Identity Provider. **Note**: If you are unable to log in, reach out to your AWS account administrator and ensure your AWS user account can access the Amazon Q Business app and the PagerDuty AI data accessor. 2. Once authenticated, type the `amazonq` command and re-enter your question for Amazon Q. 3. You can ask questions such as: - What is our rollback process? - Who can I talk to about feature X? - Why do we use encryption for feature Y? - What kinds of questions can you answer? 4. PagerDuty AI searches your connected Amazon Q Business data sources to find and show you relevant information. It presents key information, including a link to the source documents. PagerDuty AI only reads data – it does not modify any source content or run any actions, even if PagerDuty AI is integrated with Amazon Q Business as a plugin. **Note**: Information availability and recency vary based on the Amazon Q Business configuration in your AWS account. ## PagerDuty AI for Status Updates > **Availability:** PagerDuty AI for internal status updates is available in US and EU [service regions](/get-started/service-regions). PagerDuty AI for the external status page is not available at this time. > **Required User Permissions:** - If you are not a Limited Stakeholder or Full Stakeholder, you can generate status updates for incidents assigned to you. > - Only Responders, Managers, Global Admins, and Account Owners can generate status updates for incidents that are not assigned to them. > **Slack and Microsoft Teams Sources:** Status updates generate from the following chat app sources: > > **Slack** > > 1. The incident-associated channel, when present. > 2. The service-associated channel. > > **Microsoft Teams** > > 1. The incident-associated chat or meeting, when present. > 2. The service-associated channel. ### In PagerDuty 1. In the web app, click the **title** of your preferred incident, navigate to the **Status Updates** tab, and click **New Update**. 2. Click **Generate** to the right of the **Message** field. A status update automatically generates. You can make edits to the draft according to your preferences. 3. Click **Send Update**. ### In Slack and Microsoft Teams 1. On the incident card, click **New Status Update**. 2. Select the tone that you want to use when generating the status update. 3. Review and edit the status update. 4. Click **Send Update**. Alternatively, you can chat directly with the PagerDuty app and give it a prompt, such as “write a status update”. After the draft generates, you can choose **Send Status Update** to send the update, **Review Status Update** to make additional changes, or change the tone. ## Periodic Incident Progress (PIP) > **Required Permissions:** Account Owners and Global Admins can create and edit all incident workflows. You can create and edit workflows and triggers for services where they have Manager access. ### Overview The **PagerDuty AI - Periodic Incident Progress incident workflow action** automatically posts progress updates in Slack or Microsoft Teams on active incidents, keeping responders and stakeholders informed of what changed since the last update. By default, updates are sent every 15 minutes, but you can adjust the cadence to fit your team needs. It is designed for teams that want regular, low-toil status pings without manual check-ins. Each update shows only what changed since the last check—such as priority, assignee, responders, notes, or severity—rather than repeating the full incident state. Updates post to your configured Slack or Microsoft Teams dedicated incident channels. If no changes occur during an interval, the update may be skipped depending on your settings. > **Meeting Summaries:** Periodic Incident Progress posts metadata changes (status, priority, assignments, responders, severity, notes) at your configured cadence. When the [Scribe Agent](/ai-automation/advance/scribe-agent) is enabled, Periodic Incident Progress also includes AI-based meeting summaries generated by the agent in its periodic updates. > > When [Thread updates in Dedicated Channels](/integrations/slack-integration-guide/slack-user-guide#threaded-updates) is enabled in Slack, progress updates post as a thread under a pinned card. This card is then automatically updated with the latest summary. > **Important:** Periodic Incident Progress updates are only posted to **dedicated incident channels** created for specific incidents. ### Use cases - **Automated status updates**: Keep incident channels in Slack or Microsoft Teams up to date without manual typing. - **Change tracking**: Provide clear details of what changed (assignee, priority, notes, responders, severity, and other fields) since the last update. - **Cross-team visibility**: Improve cross-team awareness during longer-running incidents. ### Configuration See [Add Periodic Incident Progress workflow instructions](/workflow-actions/pagerduty-advance/add-periodic-incident-progress). ## PagerDuty AI for Automation Digest See our [Automation Actions](/ai-automation/automation/automation-actions#pagerduty-ai-for-automation-digest) article for more information on generating an automation digest. ## PagerDuty AI Analytics See our [PagerDuty AI Analytics](/incident-management/analytics/advance-analytics) article for more information on viewing PagerDuty AI Analytics data. --- URL: https://docs.pagerduty.com/ai-automation/aiops # PagerDuty AIOps Minimize noise, accelerate resolution and automate event processing PagerDuty AIOps helps teams reduce alert noise, improve incident visibility, and triage more efficiently, eliminating manual, repetitive tasks from the incident response process. With quick implementation and no ongoing maintenance, teams experience fewer incidents and resolve issues faster. > **Purchase PagerDuty AIOps:** - PagerDuty AIOps launched in April 2023 and is the [current evolution](#difference-between-legacy-event-intelligence-and-aiops) of PagerDuty's Legacy Event Intelligence add-on. > - To migrate from Event Intelligence to PagerDuty AIOps, or to purchase the add-on for the first time, read [Purchase PagerDuty AIOps](#purchase-pagerduty-aiops). ## Feature Sets PagerDuty AIOps can be broken down into the following feature sets: - [Noise Reduction](#noise-reduction) - [Triage and RCA](#triage-and-rca) - [Event Orchestration and Automation](#event-orchestration-and-automation) - [Operations Console](#operations-console) - [Increased Event Ingestion](#increased-event-ingestion) ### Noise Reduction Reduce incident noise with the click of a button. Use built-in machine learning (ML) models that learn and adapt based on user behavior, or create your own logic. You can even group alerts across services using [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping). ![Noise Reduction Settings on a PagerDuty Service](/images/kb/c1de0921506f1315c30b6d87e88497efeb201f9cb043cab973860d23f5ee12f7-reduce_noise.webp) *Noise Reduction Settings on a PagerDuty Service* **Read more about Noise Reduction features**: - [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping) - [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) - [Preview Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/preview-intelligent-alert-grouping) - [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) - [Unified Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping) - [Time-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/time-based-alert-grouping) - [Auto-Pause Incident Notifications](/ai-automation/aiops/noise-reduction/auto-pause-incident-notifications) - [Event Orchestration: Alert Suppression](/ai-automation/aiops/event-orchestration#incident-data) ### Triage and RCA Responders can leverage machine learning to immediately surface critical incident information. When an incident occurs, you can quickly discover the probable origin of the incident, whether the incident has previously occurred, and whether a change was the likely cause. ![Probable Origin Feature on a PagerDuty Incident](/images/kb/cac54ac888026d3d6d3904edc73ce6faad99b7e7aeb844c19f2375010c9824ad-triage-and-rca-features.webp) *Probable Origin Feature on a PagerDuty Incident* **Read more about Triage and RCA features**: - [Past Incidents](/ai-automation/aiops/past-incidents) - [Related Incidents](/ai-automation/aiops/related-incidents) - [Outlier Incident](/ai-automation/aiops/outlier-incident) - [Probable Origin](/ai-automation/aiops/probable-origin) - [Recent Changes](/ai-automation/aiops/recent-changes) ### Event Orchestration and Automation Event Orchestration provides state-of-the-art automation capabilities that are a force-multiplier across the entire technical ecosystem. Teams can enrich events and create complex logic within a service, or across services. This end-to-end event-driven automation ensures faster resolution and requires less input from humans who are needed for value-add work. ![Global Orchestration Configuration Screen](/images/kb/d2b481e531d4ea9789611390f6a0c4afd3cacb9fa040f535267e48513ba6885d-automation-and-orchestration-features.webp) *Global Orchestration Configuration Screen* **Read more about Event Orchestration**: - [Event Orchestration](/ai-automation/aiops/event-orchestration) ### Operations Console The PagerDuty Operations Console offers live visibility into incidents, and you can create customized views to triage and take immediate action on issues. This feature provides central IT teams and technical stakeholders with at-a-glance context on their technical environment to more efficiently triage incidents, and minimize MTTA and MTTR. ![An image of the PagerDuty web app showing the Operations Console with many triggered incidents](/images/kb/5779bf695ab3c27dc43de986f136079ad52a8aba8c38b1d15b07c9486cddf1b1-operations_console.webp) *Operations Console* **Read more about the Operations Console**: - [Operations Console](/ai-automation/aiops/operations-console) ### Increased Event Ingestion Upon request, increase the Events API rate limit from 120 events/min per key, up to 10,000 events/min per key. Contact your account team or Support to request a higher limit. ## PagerDuty AIOps Pricing PagerDuty AIOps is priced by event consumption, so you only pay for the events you ingest. PagerDuty's pricing is: - **Transparent**: Each event that PagerDuty accepts and processes is counted. This includes events sent while a service is in a [Maintenance Window](/incident-management/services/maintenance-windows). Historic and current data is viewable on your subscription page (**User Icon** → **Subscriptions**). - **Flexible**: The draw-down model with wide tiers simplifies estimation and minimizes the impact of event spikes. - **Informative**: Historical event data is visible on the PagerDuty subscription page so that you can better predict the future based on the past. - **Proactive**: Early warning notifications that alert you on your event usage can help you make the right decision. > **Event Notification Thresholds:** When an account reaches 50, 80, 90, 100, or 150% of purchased AIOps Events, PagerDuty sends a notification email to the Account Owner, and to any recipients of [Additional Notification Emails](/account-admin/billing#additional-notification-emails) in Account Settings. Check out the [pricing page](https://www.pagerduty.com/pricing/aiops/) for more details or [contact Sales](https://www.pagerduty.com/contact-us/) to learn more. | Feature | Legacy Event Intelligence | PagerDuty AIOps | |---|---|---| | **Pricing Model** | Per seat | Event Consumption | | **Features Available** | **Noise Reduction:**
• Alert Grouping (Per-Service)
  ◦ Intelligent Alert Grouping
  ◦ Content-Based Alert Grouping
  ◦ Time-Based Alert Grouping
• Auto-Pause Incident Notifications
• Alert Suppression

**Triage and RCA:**
• Probable Origin
• Related Incidents
• Outlier Incident
• Past Incidents
• Recent Changes

**Event Orchestration and Automation:**
• Event Orchestration (Per-Service)
  ◦ [Basic Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#basic-event-orchestration)
  ◦ [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)

**Visibility:**
• Visibility Console

**Event Rate Limits:**
• 120 events/min per key | **Noise Reduction:**
• Alert Grouping (Per-Service)
  ◦ Global Alert Grouping
  ◦ Intelligent Alert Grouping
  ◦ Content-Based Alert Grouping
  ◦ Unified Alert Grouping
  ◦ Time-Based Alert Grouping
• Global Alert Grouping
• Auto-Pause Incident Notifications
• Alert Suppression

**Triage and RCA:**
• Probable Origin
• Related Incidents
• Outlier Incident
• Past Incidents
• Recent Changes

**Event Orchestration and Automation:**
• Event Orchestration (Per-Service)
  ◦ [Basic Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#basic-event-orchestration)
  ◦ [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)
• Global Event Orchestration (across services)
• Dynamic Routing
• Dynamic Escalation Policies

**Operations Console:**
• Operations Console
• Visibility Console

**Event Rate Limits:**
• Maximum limit value of 10,000 events/min per key | | **Receives Feature Updates?** | No | Yes | | **Customer Availability** | • Remains available to Event Intelligence customers
• Unavailable to new customers as of April 11, 2023 | • Event Intelligence customers may migrate to PagerDuty AIOps
• Available to new customers | ## AIOps Service Configuration AIOps Service Configuration (Signal Intelligence on PD Reliability Platform) provides you with flexibility and control over how AIOps features apply. This approach allows you to enable AIOps on the [services](/incident-management/services/services-and-integrations) and [Event Orchestrations](/ai-automation/aiops/event-orchestration) that are most relevant to your needs. AIOps Service Configuration maximizes value and efficiency, and ensures that you are using advanced capabilities where they have the greatest impact. Benefits include: - **Cost-Effective Adoption**: Pay for AIOps on the services where teams will actively use it. This is especially valuable for larger organizations where not every team is ready to implement advanced AIOps features. - **Maximum Flexibility**: Roll out AIOps at your own pace and avoid unexpected event overages. - **Better Control, Better Experience**: Empower teams that want AIOps to use it, while others can stick with standard event management. Optimize both your incident response and your budget. ### How it Works - When you purchase AIOps, all services and Event Orchestrations have AIOps enabled by default. - You can disable or re-enable AIOps for [individual services](/incident-management/services/configurable-service-settings#manage-aiops) or [orchestrations](/ai-automation/aiops/event-orchestration#manage-aiops). - Only events sent to AIOps-enabled services or Event Orchestrations count toward your AIOps event volume tier. There is no change to how accepted events are counted, only which accepted events count against your AIOps event volume tier. > **AIOps and Signal Intelligence:** AIOps and Signal Intelligence are the same capability, offered under different plans: > - **AIOps** is a standalone add-on for Incident Management and legacy plans. > - **Signal Intelligence** is included in PD Reliability Platform plans. > > On PD Reliability Platform plans, Signal Intelligence is disabled by default on newly created services and Event Orchestrations. ### Manage AIOps > **Required User Permissions:** - Account Owners > - Admins and Global Admins > - Manager base role and team roles > - Manager team roles can only manage services associated with their team > **Disable Behavior:** When you disable AIOps on a service or event orchestration, you can expect the following to occur: > > - **Event Throughput**: Any increased event throughput for AIOps reverts to the standard 120 events/minute. > - **Operations Console**: Only AIOps services and their incidents are accessible on the Operations Console. > - **Noise Reduction and Root Cause Feature Access**: The system disables advanced AIOps features (like Outlier Incident, Probable Origin, Related Incidents, Past Incidents, Auto Pause, Alert Grouping, and Recent Changes) for non-AIOps Services. > - **Advanced Orchestration Capabilities**: Only AIOps-enabled Event Orchestrations can use Global Orchestrations and Dynamic Service Routing. If a non-AIOps Orchestration has AIOps rules, the system skips these rules during event ingestion. > - **Advanced Service Orchestration Rules**: Only AIOps-enabled Services can use advanced orchestration rules. If a non-AIOps Service has advanced rules, the system skips these rules during event ingestion. #### Services See the [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) article for instructions to enable or disable AIOps on a service. #### Event Orchestration See the [Event Orchestration](/ai-automation/aiops/event-orchestration#manage-aiops) article for instructions to enable or disable AIOps on an Event Orchestration. ## PagerDuty AIOps Trials To take PagerDuty AIOps for a spin before activating a trial, you can do so with the [interactive product tour](https://pagerduty.navattic.com/265z0hdg). You can activate a trial of PagerDuty AIOps via the following methods depending on your PagerDuty account status: - [Current Customers](#current-customers) - [Prospective Customers](#prospective-customers) ### Current Customers For current customers, the Account Owner can activate a trial on the account settings page: 1. In the PagerDuty web app, navigate to **User Icon** → **Account Settings**. 2. In the section **Product Trials**, select **Activate PagerDuty AIOps Trial**. 3. Your trial will automatically activate. ### Prospective Customers If you are not yet a PagerDuty customer, you can fill out [this form](https://www.pagerduty.com/try-pagerduty-aiops) and a representative will reach out about initiating a trial of PagerDuty AIOps. ### PagerDuty AIOps Trials FAQ At the end of your trial, the Account Owner has the option to purchase PagerDuty AIOps. If you decide not to continue with a paid version of AIOps, at the end of 30 days the account reverts to its original state, removing AIOps features. This deletes most configured AIOps settings (and PagerDuty does not retain them). All services revert to not having alert grouping configured, and if you were to sign up again the account would have to start from a clean slate. Consult the following table for the specific features PagerDuty retains: | Feature Category | Features | Retained / Not Retained by PagerDuty | | :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | | Ingestion | Recent Changes
Custom Change Event Transformer
High Ingestion Volumes | Not Retained | | Advanced Event Orchestration | Dynamic Field Enrichment & Extraction
Threshold Conditions
Recurring Conditions
Schedule Conditions
Rule Nesting
Paused incident notifications
Webhooks
Global Event Orchestration
Event Orchestration Variables
Dynamic Routing
Dynamic Escalation Policies | Retained | | Noise Reduction | Alert Suppression
Auto-Pause Incident Notifications
Time-Based Alert Grouping
Intelligent Alert Grouping (w/ Flexible Time Window)
Content-based Alert Grouping
Unified Alert grouping (IAG & CBAG)
Global Alert grouping | Not Retained | | Triage /
Root Cause Analysis | Change Correlation
Past Incidents
Related Incidents
Outlier Incidents
Probable Origin
Triage Widget (PD for Datadog) | Not Retained | | Dashboarding | Visibility Console
Operations Console | Not Retained | Once your trial ends, there are several ways to purchase PagerDuty AIOps: 1. **Reseller Partner**: If you previously purchased PagerDuty via a reseller, contact either the reseller or PagerDuty directly to proceed with your AIOps purchase. PagerDuty works with a wide network of reseller partners to complete your transaction. 2. **Self-Serve (Tier 5 or Below)**: If you need the Tier 5 event allotment or lower, you can add AIOps to your subscription. Navigate to **User Icon** → **Account Settings** → **Subscriptions**, and manually include PagerDuty AIOps in your plan. 3. **Contact Sales (Above Tier 5)**: For event allotments beyond Tier 5, or to speak with a sales representative, contact your PagerDuty account representative or email [sales@pagerduty.com](mailto:sales@pagerduty.com) to customize your PagerDuty AIOps subscription to fit your needs. ## Determine Your Event Volume PagerDuty AIOps is licensed per accepted event. Accepted events are any valid events that are sent to and processed by PagerDuty. PagerDuty does not charge for events that were found to be invalid, rate-limited, or that resulted in a non-successful response to the client. There are two ways to determine your event volume based on your current status as a PagerDuty customer: - [Customers](#customers) - [Prospective Customers](#prospective-customers-1) ### Customers > **Required User Permissions:** Account Owners can view event volume. If you are a current PagerDuty customer, you can view your event volume by navigating to **User Icon** → **Subscriptions** or you can use the [Event Analytics](/incident-management/analytics/event-analytics) page at **Analytics** → **Event Analytics**. If you have a newer account without enough data, you can also follow the prospective customer process in the next section. ### Prospective Customers 1. Determine how many events per month are generating from the noisiest integration you intend to send to PagerDuty. 2. Determine what percentage of your monthly events that integration sends. Some monitoring/observability tools indicate the number of events they are generating. 3. Calculate: Baseline events per month = (events/month for noisiest integration)/(% of total events from noisiest integration). ## Purchase PagerDuty AIOps To enhance your incident response process and achieve fewer incidents with faster resolution, you should consider purchasing PagerDuty AIOps. > **Required User Permissions:** Account Owners can purchase PagerDuty AIOps. ### Legacy Event Intelligence Customers For legacy Event Intelligence customers, [contact the Sales team](https://www.pagerduty.com/contact-us/) about migrating to PagerDuty AIOps. ### New Customers If you do not currently have PagerDuty's Legacy Event Intelligence product and you are interested in purchasing PagerDuty AIOps, follow the instructions below. 1. First, you must [determine your event volume](#determine-your-event-volume). Take note of this information, as you use it to select your event volume tier in step 4. 2. Next, navigate to **User Icon** → **Subscriptions** and click **Upgrade Plan**. 3. Select any **plan** (to stay on your current plan, select **Current Plan**). 4. On the next screen, select your preferred **Billing Cycle** and then check the **PagerDuty AIOps** checkbox. 5. Using the event volume information you found in step 1, select your **event volume tier** from the dropdown. 6. Complete checkout. To talk to someone about your current plan, or how you can benefit from PagerDuty AIOps, [contact the Sales team](https://www.pagerduty.com/contact-us/). ### Edit Your Event Volume Tier If you have already purchased PagerDuty AIOps and you would like to edit your [event volume](#determine-your-event-volume) tier, follow the instructions below. 1. Navigate to **User Icon** → **Subscriptions** and click **Upgrade Plan**. 2. Select any **plan** (to stay on your current plan, select **Current Plan**). 3. In the **PagerDuty AIOps** box, select your **event volume tier** from the dropdown. 4. Complete checkout.
--- URL: https://docs.pagerduty.com/ai-automation/aiops/event-orchestration # Event Orchestration Route incoming events and apply nested rule-based actions using Global Orchestrations, Global Integrations, or Service Orchestrations. Event Orchestration allows users to route events to an endpoint and create nested rules, which define sets of actions to take based on event content. Event Orchestration is PagerDuty's modern solution to help tackle your existing and future automation goals. > **Required User Permissions:** The following user roles can create/edit/delete Event Orchestrations: > > - User > - Admin > - Manager base roles and team roles. Manager team roles can create/edit/delete Event Orchestrations associated with their team. > - Global Admin > - Account Owner ## Configure Event Orchestration ### Step 1: Create an Orchestration There are three ways to create an Orchestration: - [Global Orchestrations](#global-orchestrations) (Available with [PagerDuty AIOps](/ai-automation/aiops/overview), or as Signal Intelligence for PD Reliability Platform, only) - [Global Integrations](#global-integrations) (Available on all packages) - [Service Orchestrations](#service-orchestrations) (Available on all packages) #### Global Orchestrations When an incoming event stream has more than one service destination, you can use Global Orchestrations to apply common event actions and route events to different services. > **Availability:** Global Orchestrations are only available on accounts with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on (or Signal Intelligence for PD Reliability Platform) and the [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration) pricing tier. To create a new Global Orchestration: 1. Navigate to **AIOps** → **Event Orchestration** and select **+ New Orchestration**. 2. Enter an **Orchestration Name** and an optional **Orchestration Description**. 3. Click **Save**. 4. On the next screen, select **Integrations** to view the **Integration Key**, **Email Address** (for email integrations), and **HTTP Endpoint for API** that you can use to connect your alerting systems with PagerDuty. Follow your alerting system's [integration guide](/integrations) for configuration instructions. 5. Select **Global Orchestration** to navigate to the Global Orchestration Rules graph. 6. Click **New Rule** to create a new rule. Continue to [Step 2: Create Rules](#step-2-create-rules). #### Global Integrations When an incoming event stream has more than one service destination, you can use Global Integrations to route events to different services and apply Service Orchestration rule actions. > **Availability:** Global Integrations are available on all packages. 1. Navigate to **AIOps** → **Event Orchestration** and select ** New Orchestration**. 2. Enter an **Orchestration Name** and an optional **Orchestration Description**. 3. Click **Save**. 4. On the next screen, select **Integrations** to view the **Integration Key**, **Email Address** (for email integrations), and **HTTP Endpoint for API** that you can use to connect your alerting systems with PagerDuty. Follow your alerting system's [integration guide](/integrations) for configuration instructions. 5. Next, select the **Service Routes** tab. Continue to [Step 2: Create Rules](#step-2-create-rules). #### Service Orchestrations When integrations exist on a service, you can use Service Orchestrations to evaluate your incoming events and perform additional actions. > **Availability:** Service Orchestrations are available on all packages. > > If you have a service that uses [Service Event Rules](/ai-automation/aiops/rulesets#service-event-rules), you can switch to Service Orchestrations at any time. Read the section [Switch to Service Orchestrations](#switch-to-service-orchestrations) for more information. To create a new Service Orchestration: 1. Navigate to **Services** → **Service Directory** → click your desired **service name** and select the **Settings** tab. 2. Scroll to **Event Management** and click **Service Orchestration Rules**. 3. Click **+ New Rule** and continue to [Step 2: Create Rules](#step-2-create-rules). ##### Create a Service Orchestration from a Global Integration or Orchestration A Service Orchestration can also be created after a Global Integration, or Global Orchestration is made. This method allows users to create the rules that define what happens after events are routed to a service. To create a new Service Orchestration from a Global Integration or Orchestration: 1. Navigate to **AIOps** → **Event Orchestration** → select your desired **Orchestration** and then click **Service Orchestrations**. 2. Select a **service** from the **Service Event Rules** dropdown. 3. You are then taken to the Service Orchestration graph for the service you selected. Continue to [Step 2: Create Rules](#step-2-create-rules). ### Step 2: Create Rules With Event Orchestration there are three distinct types of rules that a user can create: - [Global Orchestration Rules](#global-and-service-orchestration-rules) (Available with [PagerDuty AIOps](/ai-automation/aiops/overview) only): Global Orchestration rules are optional rules that can be created _before_ a routing rule. They determine which actions are applied to events during event processing as well as how events eventually turn into incidents. Actions applied at the Global Orchestration rule level apply to **_all_** events that match the rule's conditions, regardless of which service they are eventually routed to. Any actions applied can be overridden by Service Orchestration rules which also match against a given event. The last evaluated rule takes precedence where a single enrichment, alert, or incident action is taken multiple times. - [Routing Rules](#routing-rules) (Available on all packages): Routing rules define how events are routed to services. They must be created for events to be routed from a Global Integration or Orchestration to a service. - [Service Orchestration Rules](#global-and-service-orchestration-rules) (Available on all packages): Service Orchestration rules are optional rules that can be created after a routing rule. They determine which actions are applied to events during processing, and how events eventually turn into incidents. Service Orchestration rules have their own conditions and are linked to rules that precede and follow them. #### AI Orchestrations AI Orchestration rules are automatically generated recommendations that surface in a dedicated segment after all manual Global and Service Orchestration rules. See [AI Orchestrations](/ai-automation/aiops/event-orchestration/ai-orchestrations) for more information. #### Recommended Preparation PagerDuty recommends sending events to your Orchestration integration key to inspect the incoming JSON key/value pairs and build rules from there. To send events to Orchestrations: 1. Navigate to **AIOps** → **Event Orchestration**, select your preferred **Orchestration** and click **Integrations**. 2. On the following screen, select the integration key set you want to work with and copy the appropriate **Integration Key** to use in your upstream event source, e.g., a monitoring tool or CI pipeline. > **Note:** An Orchestration can have up to 10 integration keys associated with it. Using any of these integration keys directs events toward the Orchestration rules and routing rules specified for the Orchestration. #### Routing Rules For Event Orchestration to route events to the appropriate service, you need to create routing rules. Some things to keep in mind while working with your routing rules: - There can only be one routing rule per service per Event Orchestration. For example, if **Orchestration A** routes events to **Service A**, you cannot configure another rule within the same orchestration to route to the same service, however you _could_ configure **Orchestration B** to route events to **Service A**. - Routing rule conditions can be based on either [PD-CEF](/developer/api/pd-cef)-transformed event data or raw event payloads. - You can also create Dynamic Routing Rules, which evaluate _all_ events and do not have conditions. Dynamic Routing Rules are able to route events to services based on the **Service name** or **Service ID** in the payload. Dynamic Routing Rules are evaluated before any other routing rules on a service router. - Events that do not match any configured rules match to the [catch all rule](#catch-all-rule). The default catch all behavior does not send these events to a specific service & never creates an incident. You can edit the catch all rule to send these events to a specific service instead. > **Routing Rules and Event Deduplication:** All events—including acknowledge and resolve events—are evaluated against the conditions defined in your routing rules to determine which service they should be routed to. If you need event deduplication across all services because your trigger events have different payloads than acknowledge or resolve events, please refer to [this example](/ai-automation/aiops/event-orchestration/examples#capture-unrouted-trigger-events). ##### Create a Dynamic Routing Rule To create a dynamic routing rule: 1. Navigate to **AIOps** → **Event Orchestration** and select your preferred **Orchestration**. 2. Click **Service Routes** → **New Dynamic Route**. ![A screenshot of the PagerDuty UI emphasizing the "New Dynamic Route" button](/images/kb/2dd6a9848d6e7f6092316f4fb719bdeea5e7f31d2f8a62ef64efa66f087f242b-new_dynamic_route.webp) *Select New Dynamic Route* 3. In the modal, select the **Event Field** where routing information (i.e., either service name or service ID) is located. You can select any single [PD-CEF](/developer/api/pd-cef) field. For example, `event.summary` refers to the Summary field. You may also select free text field formats: **Raw Event** (e.g., `raw_event.foo.bar`) or **Custom Details** (e.g., `event.custom_details.foo.bar`). 4. In the **Format** dropdown, select **Service name** (default) or **Service ID**. This setting specifies if the Dynamic Routing Rule should attempt to match events to services via its name or ID (e.g., `PXXXXXX`). 5. In the **Extraction Regex** field, enter an [RE2](https://github.com/google/re2/wiki/Syntax) regex pattern that identifies where service information is located in the selected field. If you specify a capture group, the part matched by the capture group is used to set the variable. Otherwise, the entire match is used. 6. Click **Save**. > **Dynamic Routing Rules:** Keep the following information in mind while configuring a dynamic routing rule: > > - If an event does not match to a service based on your dynamic routing rule configuration, it evaluates against the next [routing rule](#create-a-routing-rule) in the service's router. > - If an event contains malformed information in the field targeted for dynamic routing, Event Orchestration drops the event (e.g., if you have configured a dynamic routing rule based on service ID, but the specified field does not contain data shaped like a service ID). > - [Global Orchestrations](#global-orchestrations) execute before Dynamic Routing Rules. Manipulating a CEF field in a Global Orchestration may lead to unintended behavior if a downstream Dynamic Routing Rule reads from that field. > - Service names are stored as cached data for routing purposes. It can take up to 10 minutes for the service name cache to update after a service's name has been changed. During this time events continue to match to services based on the previously configured service names. ##### Create a Routing Rule To create a routing rule: 1. Navigate to **AIOps** → **Event Orchestration** → select your preferred **Orchestration** → **Service Routes** → click **New Service Route**. - _Optional_: next to , enter a **description** for your new rule. 2. From the dropdown **What service should events route to?**, select a service you would like to route events to. 3. Under **When should events be routed here?**, select one of the following options: - **Always (for all events)** - **If events match certain conditions** - **On a recurring weekly schedule** (Available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)) - **During a scheduled date range** (Available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)) - **Depends on event frequency** (Available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)) 4. Depending on your selection in the previous step, configure the rule according to your needs. 5. Click **Save**. ##### Catch All Rule If an event does not match any configured routing rules, it performs the action outlined by the **catch all rule**. There are two options available for this rule: - **Events not matching a previous rule should not be sent to a specific service & should never create an incident (Default)**: If a **trigger** event reaches this rule, it creates a suppressed alert. If a **resolve** event reaches this rule, the rule attempts to resolve an open alert previously created through the orchestration with the same `dedup_key`, regardless of service. These events can also resolve suppressed alerts if a matching `dedup_key` exists. - **Send all events not matching a previous rule to a service**: If an event reaches this rule, it is routed to the chosen service and can be evaluated further by the service's Service Orchestration if one exists. > **Event Orchestration Examples:** See [Event Orchestration Examples](/ai-automation/aiops/event-orchestration/examples) for more details on both common and advanced routing rule configurations. ### Global and Service Orchestration Rules - Global Orchestration rules are optional rules that can be created _before_ a routing rule. These rules have their own conditions and are linked to rules that precede and follow them. - Global Orchestration rules can include any action except those that define how an event is routed to a service. - Service Orchestration rules are optional rules that can be created _after_ a routing rule. These rules have their own conditions and are linked to rules that precede and follow them. - Service Orchestration rules determine which actions are applied to events during processing before an incident triggers. - When there is more than one potential global or service orchestration rule that an event could match against, that group of rules is called a **set**. Events match against whichever rule in a set has the highest ordinality (i.e., appears first, either in the UI or API). - When creating a Global or Service Orchestration rule, any conditions can be created and combined, similar to a routing rule, however, threshold-based conditions can only ever exist on their own. If a user wants to create a rule with a threshold-based condition they must make a specific service rule that only has that condition present. > **Ruleset Limits:** A set of rules grouped vertically in the web app can be referred to as a "ruleset." Rulesets can have up to 25 rules. As needed, you can [nest rules](#configure-a-global-or-service-orchestration-rule), which allows you to create more than 25 rules in an orchestration, however PagerDuty advises against making orchestrations too complex, as this can make it difficult to maintain, or for other teams to understand your orchestration's logic. ### Recombining Rules If your orchestration logic is complex, use **Connect Mode** to reduce redundant rules and improve user experience by enabling multiple rules to recombine back into a single rule. To learn more, see the guide on [Recombining Rules](/ai-automation/aiops/event-orchestration/recombining-rules). ![Connect mode](/images/kb/030009995b984499c816309443cd23189f2104f5d4f19a0e4dfb77f2395b17f2-efe8d9a8d5d4a00326955bd8b5261760ad03f8fd195954834bf5c213610a353c-recombining-rules-nested-rules.png) *Connect mode* ### Configure a Global or Service Orchestration Rule 1. Navigate to **AIOps** → **Event Orchestration** → select your preferred **Orchestration** → select **Global Orchestration** or **Service Orchestrations** (and select a service), and click **New Rule** on an empty Orchestration rule page or **** on an Orchestration rule page with existing rules. 2. A modal appears on the page. Select the type of condition, then specify the appropriate **conditions** for this new rule. 3. Click **Next**. 4. Specify the **actions** that should be applied in the following menus: - [Incident Data](#incident-data) - [Basic Event](#basic-event) - [Event Fields](#event-fields) - [Custom Fields](#custom-fields) - [Rule Variables](#create-custom-rule-variables) - [Alert Data](#alert-data) - [Automation](#automation) - [Webhooks](#webhooks) - [Automation Actions](#automation-actions) 5. Click **Save** to save this new rule. #### Incident Data ##### Basic Event Determine how the incident should be created, or override default incident creation. | Incident Action Option | Instructions and Details | | :---------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Create an alert but pause notifications
([Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)) | An incident can trigger after a predetermined amount of time. Enter the **amount of time** you would like to pass before an incident and notifications are created in the **Suspend alert for \_ second(s) before triggering incident** field. See [Pause Incident Notifications](#pause-incident-notifications) for more details. | | Suppress alert
([Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)) | Alerts that match the routing rule conditions suppress, meaning they do not create PagerDuty incidents or notify responders. You may want to suppress alerts if you do not want responders to be notified outside of support hours, or within any specific [timeframe](#create-a-routing-rule). Suppressed alerts are visible in the [Alerts table](/incident-management/incidents/alerts/alerts-table). | | Drop incident and stop processing
([Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)) | **Note**: Only available for Global Orchestration rules.
Events that match this rule are dropped out of PagerDuty's event ingestion pipeline. They generate no data within the PagerDuty platform, do not create Incidents, and are not turned into Alerts. It is not possible to audit PagerDuty for events that were dropped. | | Set Priority | To set priority, check the **Set Priority** checkbox and select your desired **priority level** from the dropdown.
[Incident priority](/incident-management/incidents/incident-priority) allows the classification of incidents based on a level of prioritization. Incident priority must be [enabled on your account](/incident-management/incidents/incident-priority#configure-incident-priority) before it can be set with orchestrations. | | Dynamic Escalation Policy Override
([Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration)) | To override a service's assigned [Escalation Policy](/incident-management/schedules/escalation-policies), select your preferred escalation policy from the dropdown. The on call responder associated with the selected escalation policy receives notifications when an incident triggers, instead of the responder associated with the service's configured escalation policy. | | Add a note to the incident | To add a note when an incident is created, under **Additional Context**, enter the text of the note that you would like to be added to an incident that meets your rule's criteria. If multiple rules in an orchestration add a note, only the note from the most recently evaluated rule is added to the incident.
[Notes](/incident-management/incidents/edit-incidents#add-a-note-to-an-incident) can be used to help responders resolve incidents quicker by including information or links related to the system that the event comes from. | > **Adding a Note to a New Incident:** Adding a note or overriding an Escalation Policy only applies when an event triggers a new incident. These actions are not applied to subsequent events and alerts that are grouped or deduplicated into an existing incident. ##### Event Fields Event Fields allow you to copy important data from any combination of source event fields into any [PagerDuty Common Event Format (CEF)](/developer/api/pd-cef) field. Translate difficult machine terms and code into helpful context for responders so they can effectively respond to the problem. Event Fields can also be used to enhance PagerDuty AIOps capabilities by customizing alerts, influencing the [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) and Intelligent Triage machine learning algorithms. Enrich and update any [CEF](/developer/api/pd-cef) field or even create new key values within the Custom Details object using custom rule variables. When events are sent to PagerDuty, they are transformed into Common Event Format. You can replace any CEF field or even create new key values within the Custom Details object. > **Availability:** Event Fields are available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). ![Event Orchestrations transformations](/images/kb/57c69a5903d7bb4d13197af6531cc4fe7df957349c37b7ec8514e17dc71b0d37-event_fields.webp) *Event Orchestrations Event Fields* 1. Click **Add Event Field**. 2. Perform the following: | Replace Event Field | Instructions and Details | | :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Common Event Field (CEF) | Select your preferred **Common Event Field (CEF)** from the **Event field to set** dropdown. | | Right dropdown | Select whether you would like to use **Regex** _or_ a **Template** from the **Replace using** dropdown. | | Template option | If you chose a text template from the dropdown, you can reference a variable defined in the [Create Custom Rule Variables](#create-custom-rule-variables) section above using `{{ }}` brackets (e.g., `{{class}}`) in the **Replace with value** field. | | Regex option | If you chose the **Regex** option from the dropdown, enter a **Value** and the origin **Source**. | Event Fields are available with both Global Orchestrations and Service Orchestrations. ###### Deduplication The `dedup_key` field is used to merge events into a single alert. Events with the same `dedup_key` can update the status of the alert they are automatically merged into. To set a deduplication key: 1. In the Event Fields section of your rule, under Define Custom Variable, [create a rule variable](#create-custom-rule-variables) from event fields by entering a **Variable Name**, **Event Field** and the **Extraction Regex**. You may use Sample Events on the right to create these rule variables. 2. Next, select **Dedup Key** from the **Event field to set** dropdown. Select whether you would like to use **Regex** or a **Template** from the right hand dropdown. If you use a Template, you can reference a rule variable defined in step 1 using `{{variable name here}}` brackets in **Replace with value** field. If you are using Regex, enter a **Value** and the **Source**. > **Using Event Fields on Email Events:** [Event Fields](#event-fields) are only available for email events sent to [Global Integrations](#global-integrations). Users can extract data from the email event using regex matching into multiple rule variables. **Currently, only** `Summary` **and** `Dedup_Key` **Common Event Fields can be replaced for email events.** ##### Custom Fields Replace or fill incident Custom Fields with static text, [event fields](#event-fields) or [rule variables](#create-custom-rule-variables). This allows you to bring event data into your incidents and use event-driven automation in your incident management. For example, you may wish to pass the `component`, `class`, or other `custom details` event fields into incident custom fields. Once a value is in a custom field, it can be used elsewhere in the product such as [Status Update Templates](/incident-management/communicate/status-update-templates) or as part of the [ServiceNow integration](/integrations/servicenow-integration-guide), which supports [custom fields bi-directional syncing](/integrations/servicenow-integration-guide/advanced-servicenow-configuration/servicenow-custom-field-mappings). > **Availability:** - Business Plans and above are able to set Custom Fields to static text values through Event Orchestration (#3 in table below) > - Enterprise for Incident Management, Digital Operations (Legacy), Event Intelligence or AIOps plans are able to dynamically populate custom field values with Event Orchestration. This includes replacement with both event fields and variables (#1 and #2 in table below). > **Custom Fields Set on New Incidents:** Custom fields are only set when the event triggers a new incident. Subsequent events and alerts that are grouped or deduplicated into the incident do not update Custom Fields at this time. ![The Custom Fields configuration screen in Event Orchestration, showing a custom field being set to a static text value](/images/kb/97bfc5a78f418a71b217c131f0cc8958fcccf12051bafa60bb3b02ab82bf38c7-eo-custom-fields.webp) *Custom fields in Event Orchestration* 1. Click **Add Custom Incident Field**. 2. Perform the following:
Custom field to set Replace with value
Select your preferred **Custom Field** There are a few options for how to replace values: 1. **Replace with event field**: Use double curly brackets to reference event fields. E.g.: `{{event.component}}`. 2. **Replace with [variable](#create-custom-rule-variables)**: Use double curly brackets to reference both cache variables and rule variables. **Note**: variables must first exist before they can be referenced. E.g.: `{{variables.env}} {{cache_var.foo_bar}}` 3. **Replace with static text**: Simply use static text, such as `foo-bar` in the above image.
See the [Event Fields](#event-fields) section for more information. ###### Field Types Supported
Custom Field Type Expected Event Orchestration Format Example
Text As is Hello World
Single Select As-is OptionA
Multiple Select Array with quoted strings \[“OptionA”, “OptionB”]
Tag Array with quoted strings \[“TagA”, “TagB”]
Date-Time ISO-8601 formatted date-time with timezone. Microseconds are accepted but not required. - yyyy-mm-ddThh:mm:ss.sss±hh:mm - yyyy-mm-ddThh:mm:ss±hh:mm - yyyy-mm-ddThh:mm:ss.sssZ - yyyy-mm-ddThh:mm:ssZ - 2024-01-25T16:17:18.315+0500 or - 2024-01-25T16:17:18+0500 or - 2024-01-25T16:17:18.315Z or - 2024-01-25T16:17:18Z
Decimal As-is 101.234
Integer As-is 1234
Boolean True or False
**Note**: If left empty, defaults to False
True
##### Create Custom Rule Variables You can define custom rule variables to capture snippets from a source event using regex matching for use with [Event Fields](#event-fields). | Field | Instructions and Details | | :--------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Variable Name | Enter a name for the rule variable. | | Event Field | Enter the full path of a [CEF](/developer/api/pd-cef) or non-CEF field to read the rule variable from. For example,
use `event.summary` for the **Summary** CEF field, or `raw_event.fieldname` to read from the original event's `fieldname` data. | | Extraction Regex | Enter an [RE2](https://github.com/google/re2/wiki/Syntax) regular expression, which matches the part of the field you want to extract. If you specify a capture group, the part matched by the capture group is used to set the rule variable. Otherwise, the entire match is used. | You may use **Sample Events** on the right as a reference for rule variables by clicking **Show Details**. You may add multiple rule variables by clicking **Add Variable** in the upper right of the Customize Event Fields panel, or delete rule variables by clicking the icon directly to the right of the rule variable. ##### Alert Data | Alert Action | Instructions and Details | | :---------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Set Severity | To set [severity](/developer/api/pd-cef#pd-cef-fields), check the **Set Severity** checkbox and select **info, error, warning or critical** from the dropdown.
Severity can be used for [Dynamic Notifications](/incident-management/incidents/dynamic-notifications), which are defined by the service settings. To use Dynamic Notifications, the events must be routed to a service that sets Dynamic Notifications based on severity levels.
With severity controlled via Event Orchestrations and the service configured to use dynamic notifications, you can [control the incident urgency](/incident-management/incidents/dynamic-notifications). | | Set a custom trigger/resolve action | If you would like to automatically trigger or resolve an alert based on your event rule's conditions, in the section **Override the given** `event_action` **behavior**, check the box for either **Always trigger an alert** or **Always resolve an alert**. | #### Automation Event Orchestration enables you to trigger automations at machine speed. You can leverage webhooks with Global Orchestration and Service Orchestration rules to trigger automations in external systems. Automation Actions within Service Orchestration rules allow you to run automations already created in the PagerDuty platform. Through an Event Orchestration rule, run the Automation on Incidents or Automation on Alerts so that the automation is completed before a human is notified. Only one automation can be specified per rule, however multiple automations can be triggered during incident creation by [nesting rules](#configure-a-global-or-service-orchestration-rule) one after another. To help you get started, see the example on how to [Automate Remediation for Specific Incidents](/ai-automation/aiops/event-orchestration/examples#automated-remediation-for-specific-incidents). > **Configuration Note:** Ensure that any configuration in the Event Orchestration aligns with the defined Trigger condition as it is possible to create a scenario where an automation would never run. This conflict could occur in a single rule or with nested rules. For example: > > - **Suppression Conflicts**: If you set rule #1 to suppress all alerts and rule #2 to "Run Automation Action" when an alert is added, the automation never runs because the alert was never created. > - **Deduplication vs. Grouping**: If your rule is set to trigger "Automatically when Alert is added to an Incident," it fires for the initial alert and any subsequent **grouped** alerts. However, it does **not** fire for **deduplicated** events that update the initial alert, as no new alert is being added to the incident. > > These rules would never trigger an automation as every alert would be suppressed, therefore an automation that is configured to run when an alert is added to an incident is impossible. ##### Webhooks Webhook Actions allow response teams to easily define a dynamic webhook through an Orchestration and send a custom payload to a specified endpoint. This enables responders to automate actions like restarting a server, clearing logs, and reverting bad deploys. > **Availability:** Webhooks are available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). The payload can be set using a combination of several predefined variables. To configure a webhook action within an event rule:
Option Instructions and Details
Use webhooks if an event reaches this rule (_Enable webhook_) Click the **toggle** to enable the webhook.
When should we run this Webhook? (_Trigger condition_) Select the scenario from the dropdown for when the webhook should run: - Allow responders to manually send this action from the incident on incident creation - Automatically when Alert is added to an Incident - Automatically when Alert is suppressed - Automatically when Alert is paused/suspended
Name Enter a **webhook name** to be displayed on the alert or incident.
Webhook URL Enter the **API endpoint** for the payload.
Headers Select the **+ Header Field** button and enter the **Name** and **Value** for the webhook header.
JSON Body Fields (_Optional_) Enter a **name** and **value** using [rule variables](#create-custom-rule-variables) or [cache variables](/ai-automation/aiops/event-orchestration/cache-variables#step-2-create-a-new-cache-variable) to further enrich the custom action.
You can see a configured webhook action example and the resulting payload below: ![Configured Webhook Action](/images/kb/4e6fd2a5e72b1747d24f1dffa3d4ee5b6e2215375f1d47c91f31d94fca28d0cf-event_orchestration_webhook_action_example.webp) *Configured Webhook Action* ```json // Webhook Payload example { "__pd_metadata": { "alert": { "id": "Q3HPU6SIHHN1PF" } }, "dedup": "cb0af6922cfc4a39a252e26a83380b3d", } ``` ##### Automation Actions Runbook Automation Self-Hosted allows users to specify which [PagerDuty Automation Action](/ai-automation/automation/automation-actions) should be run based on an incoming event's payload. Responders can initiate automated diagnostics or remediation as soon as an incident is created, saving critical time during major incidents, or preventing major incidents altogether. Event Orchestration is able to automatically trigger any Automation Action that has already been created and is allowed for use on the service Event Orchestration is being used on. Read the [Automation Actions](/ai-automation/automation/automation-actions) article to learn more about how to configure actions and their permissions. Automation Actions can only be enabled for [Service Orchestration rules](#service-orchestrations). > **Availability:** This feature is available for Business, Enterprise for Incident Management and Digital Operations (Legacy) plans that meet the following criteria: > > - **Business Plans**: Accounts must have the PagerDuty AIOps and PagerDuty Automation Actions add-ons, as well as [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). > - **Enterprise for Incident Management and Digital Operations (Legacy) Plans**: Accounts must have the PagerDuty Automation Actions add-on and [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). > > [Contact the Sales team](https://www.pagerduty.com/contact-sales/) if you are interested in [PagerDuty AIOps](/ai-automation/aiops/overview), and you may [fill out this form](https://www.pagerduty.com/contact-us/automation-actions/) if you are interested in Automation Actions. To configure an Automation Action within your Service Orchestration rule:
Option Instructions and Details
Use Automation Actions if an event reaches this rule (_Enable Automation Action_) Click the **toggle** to enable the Automation Action.
When should we run this Action? (_Trigger condition_) Select the scenario from the **dropdown** for when the Automation Action should run: - Automatically when Alert is added to an Incident - Automatically when Alert is suppressed - Automatically when Alert is paused/suspended
Automated Action Select an existing Automation Action from the **dropdown**.
> **Removed Automation Action:** If an Event Orchestration rule has an Automation Action specified that is no longer valid due to it being deleted or not available, the rule with the Automation Action persists and still functions, however the Automation Action no longer triggers. Rules where this occurs have a yellow icon on the Automation tab when you [edit the rule](#edit-a-service-rule-on-a-global-orchestration), to indicate that the Automation Action is no longer available. ### Copy Service Rules > **Copied Service Rule Limitations:** Copied service orchestration rules persist for 5 minutes after being copied or until they are manually deleted via the successful rule copy icon located in the top right of the service orchestration canvas. > > Copying Event Orchestration Routing Rules is not currently supported. To copy an existing service orchestration rule: 1. Click the menu shown and select **Copy Rule**. 2. An icon appears in the top right of the service orchestration canvas indicating that a rule has been copied when this is successful. Copying a rule copies all of its conditions, actions, and action configurations. 3. Copied rules can be pasted after, before, or between any existing service orchestration rules. To paste a rule, you may either click the button shown on the service orchestration canvas between existing rules, or click the menu for an existing rule and select **Paste Rule**. 4. A rule creation modal appears and it contains all the conditions, actions, and action configurations for the rule that was copied. These conditions, actions, and action configurations can be edited, or they can be left as they are. Click **Save**. ## Manage AIOps PagerDuty's AIOps Service Configuration (Signal Intelligence on PD Reliability Platform) provides you with flexibility and control over how and where AIOps features apply. This feature allows you to enable or disable AIOps on Event Orchestrations. See the [PagerDuty AIOps](/ai-automation/aiops/overview#aiops-service-configuration) article for more information. - For AIOps customers, all newly-created Event Orchestrations have AIOps enabled by default. - Changes to AIOps configurations may take up to 5 minutes to fully apply. > **Required User Permissions:** - Account Owners > - Admin and Global Admins > - Manager base role and team roles > - Manager team roles can only manage Event Orchestrations associated with their team > **Disable Behavior:** When you disable AIOps on an Event Orchestration, you can expect the following to occur: > > - **Event Throughput**: If an AIOps integration key requests an increased throughput and you subsequently disable AIOps, it defaults back to a maximum of 120 events/min. > - **Global Orchestration**: Only AIOps-enabled Event Orchestrations have access. The system skips any existing Global Orchestration rules on a non-AIOps Event Orchestration during event ingestion. > - **Dynamic Service Routing Rule**: Only AIOps-enabled Event Orchestrations have access. The system skips any existing Dynamic Service Routing Rules on a non-AIOps Event Orchestration during event ingestion. > - **Routing to AIOps-Enabled Services**: Only AIOps-enabled Event Orchestrations can route to AIOps-enabled services. If a non-AIOps Event Orchestration has an invalid routing rule that routes to an AIOps service, the event still routes to the service to ensure it does not miss an incident. However, this event does not count against your AIOps event volume tier but the incident has all AIOps features disabled, including skipped Orchestration rules. This may result in unintended consequences such as increased noise. > - **Routing to AIOps-Disabled Services from AIOps-Enabled Event Orchestration**: Since AIOps features such as Global Orchestrations and Dynamic Service Routes can still be applied, all events sent to an AIOps-enabled Event Orchestration count against the AIOps event volume tier, even if the Service has AIOps disabled. > > ![Error message from an Orchestration routing to a non-AIOps service](/images/kb/5066b1978e71107b0a2049321b8d9ec4fafd2208bef6f9f1f78874e2a6be981e-eo-manage-aiops.png) *Error message from an Orchestration routing to a non-AIOps service*
To enable or disable AIOps on an Event Orchestration: 1. Navigate to **AI** → **AIOps** → **Event Orchestration**. 2. To the right of your preferred orchestration, click the kabob menu and perform the following based on your use case: - Click **Enable AIOps**. In the confirmation modal that appears, click **Enable** to complete the process. - Click **Disable AIOps**. In the confirmation modal that appears, click **Disable** to complete the process. ## Manage Integrations When you [create an Event Orchestration](#step-1-create-an-orchestration), PagerDuty automatically creates a default integration set, which consists of an [Events API v2](/developer/events-api-v2-overview) integration key and an [integration email address](/integrations/email-integration-guide#integrate-with-event-orchestration). If you [delete](#delete-an-integration) or [migrate](#migrate-an-integration-from-an-existing-ruleset-or-orchestration) all integration keys associated with an orchestration, the orchestration's rules persist, however they are not able to receive or evaluate events. ### Create an Integration 1. In the web app, navigate to **AIOps** → **Event Orchestration**. 2. Select your desired **Orchestration** from the list. 3. Select **Integrations**, click **New Integration** and select **Create new integration**. 4. Enter a **name** for the integration and click **Save**. > **Integration Limit:** One orchestration can have up to 10 integrations. ### Rename an Integration 1. In the web app, navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** with the integration you would like to rename from the list. 3. Select **Integrations**. 4. On the top-right of the integration you would like to rename, click . 5. Enter a new **name** for the integration and click **Save**. ### Delete an Integration 1. In the web app, navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** with the integration you would like to delete from the list. 3. Select **Integrations**. 4. On the top-right of the integration you would like to delete, click . 5. In the confirmation modal, click **Delete**. 1. **Note**: This action cannot be undone. ### Migrate an Integration from an Existing Ruleset or Orchestration To assist with the transition from [Rulesets](/ai-automation/aiops/rulesets) to Event Orchestration, you may wish to [manually migrate an integration from Rulesets](#migrate-an-integration-from-a-ruleset) to a new orchestration. #### Migrate an Integration from a Ruleset 1. In the web app, navigate to **AIOps** → **Event Orchestration**. 2. Select your desired **Orchestration** from the list. 3. Select **Integrations**, click **New Integration** and select **Permanently migrate integration from existing Ruleset**. 4. From the dropdown in the modal, select the **Ruleset** you would like to migrate. 5. Click **Migrate**. > **Note:** This action is permanent and cannot be undone. #### Migrate an Integration from an Orchestration 1. In the web app, navigate to **AIOps** → **Event Orchestration**. 2. Select your desired **Orchestration** from the list. 3. Select **Integrations**, click **New Integration** and select **Migrate integration from existing Orchestration**. 4. From the dropdowns in the modal, first select the **Orchestration** with the desired integration, then select the **Integration**. 5. Click **Migrate**. ## Manage Rules The following information details how to manage the three rule types that are relevant to Event Orchestration: - [Global Orchestration Rules](#manage-global-orchestration-rules) - [Routing Rules](#manage-routing-rules) - [Service Orchestration Rules](#manage-service-orchestration-rules) ### Manage Global Orchestration Rules #### Edit, Disable or Reorder a Global Orchestration Rule 1. Navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** from the list that contains the Global Orchestration rule you wish to edit or disable. 3. Select **Global Orchestration**. 4. On the following page: 1. **To edit**: Click in the top-right of your desired rule. In the modal, make any changes to conditions or rule information and click **Save**. 2. **To disable**: Click in the top-right of your desired rule and select **Disable**. The rule is immediately disabled, and appears in the rule's description. To enable the rule again, click and select **Enable**. 3. **To reorder**: Click in the top-right of your desired rule and select an action, as appropriate (e.g., **Move to Top**, **Move Up**, **Move Down**, **Move to Bottom**). #### Delete a Global Orchestration Rule 1. Navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** from the list that contains the Global Orchestration rule you wish to delete. 3. Select **Global Orchestration**. 4. On the following page, click in the top-right of your desired rule and select **Delete**. 5. In the confirmation modal, click **Delete**. 1. **Note**: This action cannot be undone. ### Manage Routing Rules #### Edit or Disable a Routing Rule 1. Navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** from the list that contains the routing rule you wish to edit or disable. 3. Select **Service Routes**. 4. On the following page: 1. **To edit**: Click to the right of your desired routing rule. In the modal, make any changes to conditions or rule information and click **Save**. 2. **To disable**: Click to the right of your desired routing rule and select **Disable**. The rule is immediately disabled, and appears in the rule's description. To enable the rule again, click and select **Enable**. 3. **To reorder**: Click in the top-right of your desired rule and select an action, as appropriate (e.g., **Move to Top of All Routes**, **Move Up**, **Move Down**, **Move to Bottom of All Routes**). #### Delete a Routing Rule 1. Navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** from the list that contains the routing rule you wish to delete. 3. Select **Service Routes**. 4. On the following page, click to the right of your desired routing rule and select **Delete Rule**. 5. In the confirmation modal, click **Delete**. 1. **Note**: This action cannot be undone. ### Manage Service Orchestration Rules There are two places where you can manage Service Orchestration rules: - [In Event Orchestration](#manage-a-service-orchestration-rule-in-event-orchestration) - [On a Service's Settings Tab](#manage-a-service-orchestration-rule-on-a-services-settings-tab) #### Manage a Service Orchestration Rule in Event Orchestration ##### Edit, Disable or Reorder a Service Rule 1. Navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** from the list that contains the service rule you wish to edit or disable. 3. Select **Service Orchestrations** and select your desired **service** from the dropdown. 4. On the following page: 1. **To edit**: Click to the right of your desired routing rule. In the modal, make any changes to conditions or rule information and click **Save**. 2. **To disable**: Click to the right of your desired routing rule and select **Disable**. The rule is immediately disabled, and appears in the rule's description. To enable the rule again, click and select **Enable**. 3. **To reorder**: Click in the top-right of your desired rule and select an action, as appropriate (e.g., **Move to Top**, **Move Up**, **Move Down**, **Move to Bottom**) ##### Delete a Service Rule 1. Navigate to **AIOps** → **Event Orchestration**. 2. Select the **Orchestration** from the list that contains the service rule you wish to delete. 3. Select **Service Orchestrations** and select your desired **service** from the dropdown. 4. On the following page, click in the top-right of your desired rule and select **Delete**. 5. In the confirmation modal, click **Delete**. 1. **Note**: This action cannot be undone. #### Manage a Service Orchestration Rule on a Service's Settings Tab ##### Edit, Disable or Reorder a Service Rule 1. Navigate to **Services** → **Service Directory** and select your desired **service**. 2. Select the **Settings** tab, scroll to the **Event Management** section and click **Service Orchestration Rules**. 3. On the following page: 1. **To edit**: Click to the right of your desired routing rule. In the modal, make any changes to conditions or rule information and click **Save**. 2. **To disable**: Click to the right of your desired routing rule and select **Disable**. The rule is immediately disabled, and appears in the rule's description. To enable the rule again, click and select **Enable**. 3. **To reorder**: Click in the top-right of your desired rule and select an action, as appropriate (e.g., **Move to Top**, **Move Up**, **Move Down**, **Move to Bottom**) ##### Delete a Service Rule 1. Navigate to **Services** → **Service Directory** and select your desired **service**. 2. Select the **Settings** tab, scroll to the **Event Management** section and click **Service Orchestration Rules**. 3. On the following page, click in the top-right of your desired rule and select **Delete**. 4. In the confirmation modal, click **Delete**. 1. **Note**: This action cannot be undone. ## Send Events to a Global or Service Orchestration ### Send Events to Global Orchestrations 1. Once you have [configured a Global Orchestration](#global-orchestrations), navigate to **AIOps** → **Event Orchestration** → click the **name** of your Global Orchestration. 2. Click **Integrations** to navigate to the **Integrations** section of the Event Orchestration. Each Event Orchestration has the following routing options for each integration key set: - **Integration Key**: You may use the integration key with many of the [tool integrations](/integrations). You may also use it to send events via API (see below). - **Email Address**: You may use the email address with the [Email Integration](/integrations/email-integration-guide). - **HTTP Endpoint for API**: You may use the integration key and the [Events API V2](/developer/send-alert-event) to send events to this endpoint. ### Send Events to Service Orchestrations 1. Add your preferred [tool integration](/incident-management/services/services-and-integrations#add-integrations-to-an-existing-service) or a [Custom Event Transformer integration](/developer/custom-event-transformer) to the service where you configured the above [Service Orchestration rule(s)](#service-orchestrations). 2. Once you have added the integration to your service, you are directed to the Integrations tab. Find the integration that was just added in the list, click to the right and then copy its **Integration Key**. 3. Use this integration key to complete your integration [according to its guide](/integrations), and then send test events to your service. ## Switch to Service Orchestrations If your account has services that are currently using [Service Event Rules](/ai-automation/aiops/rulesets#service-event-rules), you may choose to switch to Service Orchestrations, which is a more robust feature. When you switch to Service Orchestrations, events that land on the service, regardless of source, are evaluated by Event Orchestration instead of Event Rules. > **Note:** Email events are an exception. If an email event comes in via a service-level [email integration](/integrations/email-integration-guide), the Service Orchestration is ignored, and only the [email filters and rules](/integrations/email-integration-guide/email-management-filters-and-rules) are applied. In contrast, if an email comes in on a Global Orchestration, then the Global Orchestration rules are applied, followed by Service Orchestration rules, if present. To switch to Service Orchestrations: 1. Navigate to **Services** → **Service Directory** → and select your desired **service**. 2. Select the **Settings** tab, scroll to **Event Management** and then click **Switch to Service Orchestrations**. The service can be switched back to processing events using Event Rules using the same process. ## Pause Incident Notifications As a feature of Event Orchestration, you can configure rules to create alerts in a **Suspended** state, which pauses incident creation and notifications for a predefined amount of time. During the pause period, new alerts are viewable in the [Alerts Table](/incident-management/incidents/alerts/alerts-table) with a **Suspended** status. You can take one of two actions on a **Suspended** alert: either **Trigger** it, which immediately creates an incident and sends out responder notifications, or **Resolve** it, which prevents the incident and notifications from being created altogether. > **Availability:** Pausing incident notifications is available as part of the [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration) package. [Contact the Sales Team](https://www.pagerduty.com/contact-us/#contact-sales) if you would like to upgrade to a plan with this feature. > > Pausing incident notifications is only available on incidents generated by the [Events API](/developer/events-api-v2-overview), and does not work with those generated from the [REST API](/developer/rest-api-overview). To configure paused incident notifications: 1. While [configuring a Global or Service Orchestration Rule](#configure-a-global-or-service-orchestration-rule), select the **Incident Data** tab and check the box next to **Pause notifications**. 2. Enter a value (in seconds) for **Suspend alert for \_\_\_ seconds before triggering an incident**. ![Select pause notifications](/images/kb/a149d9272e82c4cbd2eea30405018cbfdea7967893c95dc1d4def68cfae064e9-small-Select_pause_notifications.webp) *Select pause notifications* 3. Click **Save**. ### View and Take Action on Paused Alerts To view alerts in a paused state, navigate to the **Alerts** table in the upper menu of the web app. Alerts with paused incident notifications have a **Suspended** status: ![Suspended alert](/images/kb/fc442c722c70ccb2a9eb18fea0ec0baa5b87b9da595c40dfad5a34f1cbd3357c-delayed-incident-notif-suspended-alert.webp) *Suspended alert* To take action on a paused alert: 1. Click the incident **title** to view its details page. 2. On the right hand side, click **Trigger** to trigger an incident and send notifications, or **Resolve** if you would like to resolve the alert without triggering an incident/notifications. You see a green modal that confirms that the alert has been triggered or resolved. ![Alert details](/images/kb/8aa85b7a64834a9a664c71f16ea8c77741693f0f00821b0fbd8f726c2795e61e-delayed-incident-notif-trigger-resolve.webp) *Alert details* The pause period and action taken also appear in the Alert Log timeline, accessible by clicking an alert's **title** to view the detail page: ![Alert log](/images/kb/9294bdce20e1daaf839260ffe8f412d323aa89bbf286a54eea67c1e4a8ffa146-delayed-incident-notif-alert-log-entry.webp) *Alert log* ## PagerDuty Condition Language (PCL) You can write your [Global Orchestration](#global-orchestrations), [routing](#routing-rules), or [Service Orchestration rules](#service-orchestrations) in PagerDuty Condition Language (PCL) if you need more control over the logic than the UI offers. Select while [creating](#step-2-create-rules) or [editing](#manage-rules) a rule to access this feature. ![Edit a routing rule using PagerDuty Condition Language (PCL)](/images/kb/53a906c060ca12496013c11a56f270f51a7f3df6019a5dde934909e7259d0954-image1.webp) *Edit a routing rule using PagerDuty Condition Language (PCL)* For more information and examples, see the developer documentation [PCL Overview](/developer/pcl-overview). ## FAQ **How should I troubleshoot a rule that did not work as expected?** **Ensure the expected action is supported** - Confirm your [subscription plan](/account-admin/account-settings#your-subscription) supports the action you expected. Some Event Orchestration features are only available with AIOps. If relevant, ensure both your Event Orchestration and Service have AIOps enabled. - If you were on an AIOps Trial, verify the trial was active when the event was ingested or the incident was created. **Review the incident timeline** - Check the [incident timeline](/incident-management/incidents/overview#incident-timeline) for any errors or unexpected behavior when the event was processed. Look for skipped actions, error messages, or anything unusual. **Check the alert timeline** - Next, review the alert timeline for more details. The alert timeline can show errors or skipped actions, and provides direct links to the specific Event Orchestration rule that applied (or attempted to apply) an action, so you can jump straight to the rule for further review. **Verify the rule condition** - Carefully review the condition in your [orchestration rule](#step-2-create-rules). Ensure it is accurate and free of typos or special characters (like extra spaces, quotes, or symbols) that could interfere with matching. **Use the Recent Events pane** - Open the Recent Events panel and find the event in question. Note: Only the last 10 accepted events are displayed so you may need to send a test event with the relevant payload. - Compare the event fields and values to your rule's condition. Make sure the field names and values match exactly—any mismatch can prevent the rule from triggering. **Ensure another rule or orchestration has not overwritten your action** - All rules are applied with a "last rule wins" methodology. Any rule in a Service Orchestration can overwrite any discrete actions (all actions other than triggering webhooks or Automation Actions) that were applied in a Global Orchestration. This same behavior applies to child rules within the same orchestration. **What is the difference between Event Rules and Event Orchestration?** Many of the new features in Event Orchestration are enhancements on Event Rules, however, there are also some substantial departures from existing event rule functionality: - With Event Orchestration, rules are now evaluated iteratively. They start with Global Orchestration rules, which define actions to be performed before routing and end with the definition of Service Orchestration rules, allowing individual teams to define their own incident creation behavior at the service level. This is substantially different from the earlier approach, which evaluated Global Event Rules (GERs) and Service Event Rules (SERs) at the same time. This change has allowed PagerDuty to remove both GERs and SERs from Event Orchestration. - As an intentional part of this change, Event Orchestration now also supports evaluation of conditions against either raw or [PD-CEF](/developer/api/pd-cef)-formatted event payloads. - Another substantial change with Event Orchestration is the introduction of different rule types, as well as a rigid rule structuring. This improves observability, ensures context is established when actions are taken, and streamlines rule creation. - Event Orchestration has made improvements to integration key management by adding the ability to migrate integration keys between rulesets and orchestrations as well as the ability to combine multiple integration keys together into a single Event Orchestration, reducing the number of Global Orchestrations and Routers required to ensure events are properly normalized and directed to the right teams. **How many services can an Event Orchestration route to?** You can route events to as many as 1,000 services in one orchestration. However, each service can only have one routing rule. **Can a service have more than one set of Service Orchestration rules?** No, each service can only have one set of Service Orchestration rules (orchestration rule canvas). Here, the same set of orchestration rules is applied to all events that land on the service, which streamlines the Event Management process. **Can events be routed to a service from the Unrouted rule with Event Orchestration?** Yes, selecting a service to route events that do not match with any of the routing rules in an orchestration is possible with Event Orchestration. **Does Event Orchestration support email events?** Yes, Event Orchestration supports email events. Rules may be based on the content of an email by entering the email field as custom details in the event field `event.custom_details.subject`. Having email events as custom fields means email events are treated as CEF events that you can apply [Event Fields](#event-fields) to. **Does Event Orchestration support the "contains/does not contain" filter?** Yes, Event Orchestration supports the "contains/does not contain" filter. It has, however, been reworded and replaced with the "matches part/does not match part" filter. **Are condition values case sensitive with Event Orchestration?** No, condition values with Event Orchestration are case insensitive. **Does Event Orchestration support time-based conditions?** Yes, you can set time-based conditions with Event Orchestrations that avoid trapping events that do not match condition pairs. With Event Orchestration, events outside the set schedule are evaluated by the next rule. To configure more advanced time-based conditions with an `and` operator, you need to edit the [PagerDuty Condition Language (PCL)](#pagerduty-condition-language-pcl) directly. See the section [Advanced Configuration with the `and` Operator](#advanced-configuration-with-the-and-operator) for more information. **Is there a payload size limit for an Event Orchestration?** Yes, the maximum payload size for an Event Orchestration is 4 MB. Orchestrations greater than 4 MB return `413 Payload Too Large` errors and do not save. This limit is most relevant to users who manage Event Orchestration via the [REST API](/developer/api/reference/rest/event-orchestrations/list-event-orchestrations) or with infrastructure-as-code tools, such as Terraform. **How many integrations can be added to an Event Orchestration?** Users can associate up to 10 integrations with one Event Orchestration. --- URL: https://docs.pagerduty.com/ai-automation/aiops/event-orchestration/ai-orchestrations # AI Orchestrations Create Orchestration rules with AI AI orchestrations automatically analyze historical events and incidents and surface recommended rules that reduce noise, improve MTTR, and accelerate automation setup. You can review the expected impact, understand why a recommendation was made, and apply the recommendation. > **Availability:** This feature is only available for AIOps customers, or as Signal Intelligence for PD Reliability Platform customers. Contact your Customer Success Manager or your Account Manager to have it enabled. Learn more about orchestration concepts in [Event Orchestration](/ai-automation/aiops/event-orchestration). ## Access AI Recommendations You can access AI recommendations in two ways: - In **Event Orchestration**, click the **AI Recommendations** tab on the landing page to view a global list of recommendations across all services. - Open the **AI Recommendation** panel from the **Orchestration** page by clicking the **Recommendation** button at the bottom of the screen. ## AI Recommendations Table The **AI Recommendations** table provides a high-level view of all suggestions. The table contains the following columns: | Column | Description | | :------------------------ | :-------------------------------------------------------------------------------------------------------- | | **Service Orchestration** | The name of the relevant service orchestration. | | **AI Recommendation** | A concise AI-generated summary of the proposed rule or a generic summary that does not leverage AI. | | **Tags** | The type of action the rule applies. | | **Impact** | The estimated impact of applying the rule based on historical events and incidents over the past 90 days. | | **Success Rate** | How accurately the rule performed on events in the past 90 days. | | **Date** | When the recommendation was generated. | | **Review** | Opens the recommendation in the related service for detailed review before applying. | > **Note:** AI-generated content can contain errors. Always review the summary for accuracy, staleness, and appropriateness before relying on it. ## AI Orchestration Segment - AI orchestration rules are evaluated in a dedicated segment after all manual global orchestration and service orchestration rules. - Each AI orchestration rule is evaluated regardless of order within the segment. - You can add rules from the **AI Recommendation** panel, and disable or delete them at any time. ## AI Recommendation Panel - Clicking the **Recommendation** button at the bottom of an orchestration opens the AI orchestration segment and displays the **AI Recommendation** panel. - The panel lists recommendation cards that summarize the same details shown in the **AI Recommendations** table to quickly assess priority and relevance. ## Apply or Dismiss Recommendations 1. Click **Review** on a recommendation card to open the rule modal. 2. Review the recommended condition and click **Next**. 3. Review the proposed action and click **Save** to apply the rule. You can adjust conditions and actions to fit your use case. > **Note:** Excessive changes can reduce the effectiveness of the rule. After you save, the rule becomes active and appears in the AI orchestration segment. 4. To decline a recommendation, click **Dismiss**. To improve future recommendations, rate the recommendation as either **Good Recommendation** or **Bad Recommendation**.
--- URL: https://docs.pagerduty.com/ai-automation/aiops/event-orchestration/cache-variables # Cache Variables Event Orchestration Cache Variables Event Orchestration Cache Variables allow you to store event information once events are converted into alerts or incidents. You can then use this stored information in Event Orchestration rules for setting conditions or triggering actions. Using cache variables in this way helps manage scenarios where understanding a system's status, event patterns, or timing is critical for diagnosing issues. There are two ways to store data in variables. Both variable types populate whenever an event matches the conditions assigned to a cache variable: - **Recent event values**: Assign data from an event to a cache variable. - **Count of events**: Number of occurrences of events matching the cache variable’s condition. > **Cache Variables vs. Rule Variables:** Unlike Rule Variables, which are limited to use within a single rule, cache variables can be applied throughout the entire orchestration. For more information on Rule Variables, please refer to our [Event Orchestration](/ai-automation/aiops/event-orchestration#create-custom-rule-variables) article. > **Tip:** Configuring cache variable conditions is an identical process to setting Event Orchestration [rule conditions](/ai-automation/aiops/event-orchestration#step-2-create-rules). ## Configure Event Orchestration Cache Variables > **Cache Variable Usage Limited to Orchestration of Origin:** Cache variables can be set in both Global and Service Orchestrations, but they are only usable within the orchestration in which they were created. ### Step 1: View Cache Variables You can access Event Orchestration cache variables from either the Global Event Orchestration or Service Event Orchestration builders. To view cache variables: 1. In the web app, navigate to **AIOps** → **Event Orchestration** → select an **Orchestration** → then select your desired **Global Orchestration** _or_ **Service Orchestration**. 2. Click **View Cache Variables** in the bottom left. This will expand the **Cache Variables** pane. 3. Any existing cache variables will display in this view. If no cache variables exist yet, you will be able to review some information about creating your first cache variable. ![Event Orchestration Cache Variables](/images/kb/49ee0c2573531273b233bc9ff6be6650476af96d5ec79bfcb4d758dbd6d9aafb-cache_variables.webp) ### Step 2: Create a New Cache Variable To create a new cache variable: 1. Click **+ Variable** to open the cache variable creator modal. 2. Define the conditions that will determine when a cache variable populates with data: 1. **Variable Type**: Select a variable type from the dropdown. This defines what data populates into a cache variable. There are four options for cache variable type, and you can only select one at a time for each cache variable. Choose one of the following options and fill in the required fields: 1. **Event Data (CEF)**: Stores [CEF](/developer/api/pd-cef) data associated with an event in the cache variable. **Note**: If Event Orchestration has altered an event’s data prior to cache variable population, the altered data will be stored in the cache variable. 2. **Raw Data**: Allows you to target information in an event’s raw payload for storage. 3. **Event Count**: Tracks the number of times an event matching the specified cache variable conditions has occurred. 4. **External Data (API / Manual input)**: Allows you to leverage data from external sources to add additional context to orchestration rules. - Choose a **Data Format** to set what type of data (Text String, Number, or Boolean) can be stored in the variable. Please view the table in the [Product Limits](#external-data-variable-content) section for limit information. - Enter your desired **Data Retention** timeframe (in seconds) to set the Time To Live (TTL) for how long the data will be stored for. The TTL timer resets upon each cache variable value update. The configured TTL sets when the data loads and cannot be retroactively changed for existing data. If you update the TTL, it will apply after the next cache variable value update. 3. **Variable Name**: Enter a variable name. This is the display name that will appear in Event Orchestration rules and actions. 4. You may _optionally_ add further conditions by clicking **+ New Condition**. **Note**: Creating conditions for cache variables follows the same process as [creating routing rules](/ai-automation/aiops/event-orchestration#create-a-routing-rule) for Event Orchestration. 5. When you are finished, click **Save**. ### Step 3: Use Your Cache Variable You can use cache variables in either Event Orchestration [rule conditions](/ai-automation/aiops/event-orchestration#step-2-create-rules) or [actions](/ai-automation/aiops/event-orchestration#configure-a-global-or-service-orchestration-rule). > **Cache Variable Duration:** Stored values last for 24 hours, or until they're replaced by a new value. When a new value is set, the 24-hour countdown starts again. #### Use a Cache Variable in a Condition 1. Click **+ New Rule**, **+ Else Rule** or **Nest Rule** to add a new rule, or click to edit an existing rule in an Event Orchestration that contains cache variables. 2. Select **If events match certain conditions** from the condition type dropdown. 3. Assign the cache variable to either the **target** (e.g., `event.summary`) or **value** (i.e., the value being compared to whatever data is stored in the target) portion of the condition: 1. To assign a cache variable to the **target** portion of an Event Orchestration condition: 1. Click the left cell that shows **event** and select **Cache Variable** from the dropdown. This will populate the cell with `cache_var.`, which is how Event Orchestration references cache variables. 2. Type the cache variable name you wish to use after the period in the same cell (e.g., `cache_var.server_status`). 3. Once complete, enter your preferred value in the right cell. ![Event Orchestration Target](/images/kb/fdf0954f184477bb91c18fce564c484b4f8d6940e8f7f438e4505dc8580060d0-eo_target.webp) 2. To assign a cache variable to the **value** portion of an Event Orchestration condition: 1. Select your preferred target from the right cell and then click into the blank right cell in the condition builder. 2. Type the name of the cache variable you want to reference using the following syntax: `cache_var.your_variable_name`. 3. Click the **\<>** symbol to open the Advanced PCL editor. 4. Remove the ' ' (single quotes) wrapping your cache variable so that the value of the cache variable is evaluated (e.g., change 'cache_var.server_status' to cache_var.server_status). **Note**: You must remove the quotation marks for the cache variable to be evaluated. ![Event Orchestration value](/images/kb/0a71ba368da7f118d2e32c3e49c8ee51b028ff4f19bd996a0160f883ffc553d8-eo_value.webp) > **Tip:** Using a cache variable in the target portion of a condition means a rule will evaluate `true` or `false` without referencing the data in an event when an event is ingested. This allows you to create a logic gate that activates different branches of an Event Orchestration depending on what data is in a cache variable (e.g., `maintenance_window`, `server_status`, `deployment_status`, etc.). #### Use a Cache Variable in an Action 1. Navigate to the action you wish to reference the cache variable in. Supported actions are: 1. [Add incident note](/ai-automation/aiops/event-orchestration#basic-event) 2. [Replace event fields](/ai-automation/aiops/event-orchestration#event-fields) 3. [Custom Fields](/incident-management/incidents/custom-fields-on-incidents) 4. [Webhooks](/ai-automation/aiops/event-orchestration#webhooks) 2. Add the cache variable to the action using the following syntax: `{{cache_var.your_variable_name}}`. 3. Click **Save**. ## View Event Orchestration Cache Variables 1. In the web app, navigate to **AIOps** → **Event Orchestration** → select an **Orchestration** and then select your desired **Global Orchestration** _or_ **Service Orchestration**. 2. Click **View Cache Variables** in the bottom left to expand the **Cache Variables** pane. 3. To view the current value for a variable, select → **View / edit data**. 4. The current value, if one exists, will appear under **Current Data**. You can also manually add data by clicking **Add Data**. ## Edit Event Orchestration Cache Variables 1. In the web app, navigate to **AIOps** → **Event Orchestration** → select an **Orchestration** and then select your desired **Global Orchestration** _or_ **Service Orchestration**. 2. Click **View Cache Variables** in the bottom left to expand the **Cache Variables** pane. 3. To the right of your desired cache variable, select → **Edit configuration**. 4. Make your desired changes to the cache variable's condition(s) and properties and click **Save**. ## Disable or Delete Event Orchestration Cache Variables > **Disabled and Deleted Cache Variables:** Please be advised that disabling or deleting a cache variable may lead to unexpected behavior if there are any rules that still reference it. When you disable or delete a cache variable, it evaluates as `NULL`. For example, say you create a cache variable `host` and use it in a rule: `cache_var.host` matches `event.host`. After disabling or deleting `host`, the rule would evaluate to `NULL` matches `event.host`. > > As a best practice, please update your Event Orchestration rules before disabling or deleting a cache variable. ### Disable an Event Orchestration Cache Variable 1. In the web app, navigate to **AIOps** → **Event Orchestration** → select an **Orchestration** and then select your desired **Global Orchestration** _or_ **Service Orchestration**. 2. Click **View Cache Variables** in the bottom-left to expand the **Cache Variables** pane. 3. To the right of your desired cache variable, select → **Disable**. 4. In the confirmation modal, click **Disable**. To re-enable a cache variable, select → **Enable**. ### Delete an Event Orchestration Cache Variable > **Deletion is Permanent:** This action cannot be undone, and deleted cache variables cannot be recovered. 1. In the web app, navigate to **AIOps** → **Event Orchestration** → select an **Orchestration** and then select your desired **Global Orchestration** _or_ **Service Orchestration**. 2. Click **View Cache Variables** in the bottom-left to expand the **Cache Variables** pane. 3. To the right of your desired cache variable, select → **Delete**. 4. In the confirmation modal, click **Delete**. ## Product Limits ### Cache Variables per Orchestration - Each Global Orchestration can have 100 cache variables. - Each Service Event Orchestration can have 100 cache variables. - We do not support Cache variables for Service Routes. ### Cache Variable Content | Cache Variable Type | Data Format | Limitations | | --- | --- | --- | | Event Data (CEF) | String | Maximum of 1024 characters | | Raw Data | String | Maximum of 1024 characters | | Event Count | Integer | Maximum value of 1000. **Disclaimer**: A condition referencing a cache variable compared to a value that exceeds the limit of 1000 may lead to unexpected behavior. | ### External Data Variable Content | Data Format | Limitations | | :---------- | :----------------------------------------------------------- | | All Formats | Maximum TTL of 259,200 Seconds (72 Hours) | | String | Maximum of 1024 characters | | Number | Value must be between -9007199254740991 and 9007199254740991 | ### Cache Variable Accuracy Cache variables will process in order in a best-effort manner. Although it is expected that updates to the variables will be handled in FIFO order, this cannot be guaranteed when multiple updates occur in less than 1 second. ## FAQ **Can you use a cache variable created in a Global Orchestration as part of a Service Orchestration?** No. You can only reference cache variables in the Event Orchestration they were created for. For example, if you'd like to pass data from a Global Orchestration to a Service Orchestration, consider using a `custom_details` Event Field. Please read [Event Fields](/ai-automation/aiops/event-orchestration#event-fields) for more information. **Can you view historical values for a cache variable?** We do not currently support viewing historical cache variables, however this functionality is on our roadmap. **What happens if a cache variable value exceeds 1024 characters?** Cache variable data will truncate to fit the 1024 character limit. **Can non-string types be converted to strings?** Cache variables use [PagerDuty Condition Language (PCL)](/developer/pcl-overview), identical to Event Orchestration rules, and will attempt to interpret data in its correct format. If that process fails, it will interpret data as a string. **What is the maximum value an Event Count variable can be?** There is no maximum value for an event count variable. The maximum time range for an event count variable is 24 hours. **What happens if two cache variables in the same Event Orchestration have the same name?** It is not possible to create two cache variables with the same name in the same Event Orchestration. If you attempt to do this, you will receive an error message. **How can I tell what the current value of a cache variable is?** The current cache variable value can be [viewed](#view-event-orchestration-cache-variables) in the cache variables drawer portion of the Event Orchestration UI. Additionally, users can leverage the [variables API](/developer/api-changelog) to get the current value of a cache variable. **Is the Event Orchestration Cache Variables API supported?** Yes, there is [API support](/developer/api-changelog) for cache variables. In addition, support for cache variables with Terraform is on our roadmap. --- URL: https://docs.pagerduty.com/ai-automation/aiops/event-orchestration/examples # Examples of Event Orchestration Event Orchestration Examples [Event Orchestration](/ai-automation/aiops/event-orchestration) is a highly customizable suite of features and capabilities. The examples on this page are taken from real-world customer use cases, which you are welcome to replicate in your own PagerDuty account. - [Create Rules for Complex Alert Grouping](#create-rules-for-complex-alert-grouping) - [If Events Match Certain Conditions](#if-events-match-certain-conditions) - [On a Recurring Weekly Schedule](#on-a-recurring-weekly-schedule) - [Advanced Configuration with the `and` Operator](#advanced-configuration-with-the-and-operator) - [Capture Unrouted Trigger Events](#capture-unrouted-trigger-events) - [Standardized Triage](#standardized-triage) - [Notification Management for Specific Incidents](#notification-management-for-specific-incidents) - [Route Alerts with Dynamic Service Routes](#route-alerts-with-dynamic-service-routes) - [Automated Remediation for Specific Incidents](#automated-remediation-for-specific-incidents) - [Disable System Auto Resolve for High Priority Incidents](#disable-system-auto-resolve-for-high-priority-incidents) - [Track Event Spikes with Cache Variables](#track-event-spikes-with-cache-variables) - [Track Heartbeat Events with Cache Variables](#track-heartbeat-events-with-cache-variables) ## Create Rules for Complex Alert Grouping Leverage Event Orchestrations to stamp structured metadata onto events, then use [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) to group alerts that share that metadata. This enables sophisticated grouping scenarios that are difficult to express with default fields alone. In this example, you: - Add a rule in Global or Service Orchestration that sets a custom detail only when your grouping conditions are met. You can extract dynamic values with a rule variable (regex) or stamp a static flag. - Configure Alert Content or Intelligent + Alert Content grouping on a service to group alerts based on that custom detail. Grouping is evaluated after Global and Service Orchestration rules complete. ### Step 1: Create the Orchestration Rule 1. In your desired orchestration, create a new rule. Use a **Global Orchestration** if the scenario applies across many services; otherwise use a **Service Orchestration**. 2. Under **When should this rule be applied?**, select **If events match certain conditions**. 3. Define the event field values that indicate you want alerts to group (for example, specific sources, components, error codes, or text in `event.summary`). Click **Next**. - Optionally, click **Create rule variable** and use regex to extract a value from an event field that you want to group by (for example, a shard ID embedded in `summary`). 4. Under **Event Fields**, create or set a custom details event field, for example: `custom_details.advanced_grouping`. - If you created a rule variable in step three, set `custom_details.advanced_grouping` to the variable value. - Alternatively, set a static value like `TRUE` to flag matching events for grouping. > **Tip:** Choose a custom details name that does not already exist in your payload, so it is only set when your rule runs. Grouping does not occur on fields with a `NULL` value. 5. Click **Save** to apply the rule. 6. If you have more than one scenario, repeat steps one through five with additional rules as needed. ### Step 2: Configure Content-Based Alert Grouping 1. Navigate to **Alert Grouping** settings for the relevant service via the **Service Directory** or the **Noise Reduction** homepage. 2. Select the service(s) where you want these settings applied. 3. Choose **Alert Content** or **Intelligent + Alert Content** as your grouping mode. 4. Under **Select Fields**, choose **Custom Details**. 5. In the field name input, enter the custom details key you set in your orchestration rule (for example, `advanced_grouping`). 6. Click **Save**. ### Step 3: Validate and Tune - Trigger test events that meet your rule conditions and confirm that `custom_details.advanced_grouping` is present and correctly valued on the resulting alerts. - Verify that alerts with the same value for this field are grouped as expected on the service. - Iterate on your regex extraction or conditions to avoid over- or under-grouping. ## If Events Match Certain Conditions In this example, you [create a routing rule](/ai-automation/aiops/event-orchestration#create-a-routing-rule) that routes events to a service when matching conditions are met. 1. [Create a routing rule](/ai-automation/aiops/event-orchestration#create-a-routing-rule) and, under **When should events be routed here?**, select **If events match certain conditions**. 2. Indicate the event conditions you would like the orchestration to match using one of the following methods: | Method | Description | | :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Base conditions on incoming JSON | Depending on your account's activity, recent events may appear on the right side of the screen if events have been sent to the incoming event source. View these events to determine which values to use. | | Events sent through the API | Use the JSON field names directly (for example, `summary`). For nested fields, separate names with a dot (`.`) (for example, `payload.taskid`). If you are sending data through additional fields, enter them exactly as they are sent to PagerDuty. For example, if your events have a **tags** field, enter that field name in your rule condition as `tags`. | | Events sent through email | **Note**: The following functionality only works when you send emails to a [global email integration address](/ai-automation/aiops/event-orchestration#send-events-to-global-orchestrations). It will not work for emails sent directly to a service-level email integration. Rules may be based on the content of an email by entering the appropriate email field as custom details in the event field. The email subject is used as a default deduplication key — emails with the same subject line are automatically deduplicated. To change this behavior, add a custom deduplication key with an orchestration rule action. The most common email fields are: `event.custom_details.from[0]` (the from address), `event.custom_details.subject` (the subject line), and `event.custom_details.plain_body` (the email body). The `[0]` refers to the first position in a list of emails. To generally search through a list of emails in the **to** or **from** field, enter `event.custom_details.from` or `event.custom_details.to`. \*\*For email-generated events, `event.summary` is populated with the same value as `event.custom_details.subject` by default. However, these are separate fields and their values may differ based on customer-specified configurations. | ![Configure routing rule](/images/kb/78a9d9d4a766e37216c20f398d385cb5e6d9888c668db8affaae01b90db02c1a-configure_routing_rule.webp) *Configure Routing Rule* 3. In the **middle dropdown**, select how the event should be filtered. | Filter Option | Description | | :----------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | | matches part / does not match part | The field contains or does not contain a value. | | matches / does not match | The field equals or does not equal a value. This operation requires the field to be passed in as a string. | | exists / does not exist | The field exists or does not exist. | | matches regex / does not match regex | The field matches or does not match a regular expression. Regular expressions must use [RE2 syntax](https://github.com/google/re2/wiki/Syntax). | > **Negative Operations:** Rules with negative operations — such as **does not contain** or **does not equal** — will match events that do not contain your specified value and events that do not contain the field at all. For example: > > - `severity field does not equal critical` — this will match events where the severity field does not equal `critical` and events that do not contain a severity field at all. > > To avoid this, add an additional condition that matches only when the field exists. For example, when all conditions are true: > > - `severity field exists` > - `severity field does not equal critical` > > You must select **all conditions must be true** for the rule to match. 4. In the **second value** field, enter the value that should be met from the payload. This can be a string or regular expression. > **Case Sensitivity:** Condition values in Event Orchestrations are case-insensitive. For example, if a condition is set with `Summary` matches part `DOWN`, this will match if the `Summary` contains `Down`, `down`, and other variations of the word. 5. When additional conditions should be added, use the following options: - **+ And**: Additional conditions must be met. - **+ New Condition**: Create another set of conditions that must be met. A new condition block creates an `OR` operator of conditions that will also be evaluated alongside other blocks. 6. Click **Save** to save your configuration. > **Condition Limits:** You can create up to 25 condition blocks within a rule, and up to 64 operators (i.e., `AND`, `OR`), or a maximum of 2,048 bytes (for example, if you are using [PCL](/ai-automation/aiops/event-orchestration#pagerduty-condition-language-pcl)) in a single condition block. ## On a Recurring Weekly Schedule > **Availability:** Scheduled conditions are available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). In this example, you [create a routing rule](/ai-automation/aiops/event-orchestration#create-a-routing-rule) that routes events to a service on a weekly recurring schedule. 1. [Create a routing rule](/ai-automation/aiops/event-orchestration#create-a-routing-rule) and, under **When should events be routed here?**, select **On a recurring weekly schedule**. 2. Enter appropriate times for **Start** and **End**, select your preferred **Days of the week**, and select your **Timezone**. 3. Click **Save**. ## Advanced Configuration with the `and` Operator > **Availability:** Scheduled and threshold conditions are available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). This example details how to edit PCL to create an advanced condition that the UI does not natively support. If you select one of the following options for **When should events be routed here?**, the UI does not offer a way to set an `and` condition: - **On a recurring weekly schedule** - **During a scheduled date range** - **Depends on event frequency** You can work around this by directly editing the [PagerDuty Condition Language (PCL)](/ai-automation/aiops/event-orchestration#pagerduty-condition-language-pcl). For example, to route events to a service when the following conditions are met: - The event's `source` matches `mainframe`. - It is Wednesday or Sunday between 11:00 a.m. and 12:00 p.m. Eastern. The following PCL statement meets these conditions: `event.source matches 'mainframe' and now in Wed,Sun 11:00:00 to 12:00:00 America/New_York` ## Capture Unrouted Trigger Events Orchestration service routes include a [catch all rule](/ai-automation/aiops/event-orchestration#catch-all-rule) for events that do not match the configured rules. The default behavior creates a suppressed alert from unrouted trigger events; however, you can route these events to a specific service instead. To support event [deduplication](/ai-automation/aiops/event-orchestration#deduplication) across all services, the orchestration can resolve any open alert previously created when a matching `dedup_key` exists, regardless of which service the open alert belongs to. In this example, you [create a routing rule](/ai-automation/aiops/event-orchestration#create-a-routing-rule) that uses trigger events to create incidents on a catch all service. 1. [Create a routing rule](/ai-automation/aiops/event-orchestration#create-a-routing-rule) and, under **What service should events route to?**, select the service you would like to use as a catch all for these events. 2. Under **When should events be routed here?**, select **If events match certain conditions**. Configure the following condition: - If `event.event_action` matches part (contains) `trigger` 3. Click **Save**. 4. If necessary, [reorder](/ai-automation/aiops/event-orchestration#edit-or-disable-a-routing-rule) the rule so that it is directly above the default catch all rule. ![Routing rule for trigger events](/images/kb/6fc28c202faf6e191417355541d64ce467dc2b2b215f1d9d4b14366f927f2e70-trigger-event-route-example.webp) *Routing Rule for Trigger Events* This configuration raises the visibility for trigger events that do not match existing routing rules while also preserving the default resolve behavior described above. ## Standardized Triage > **Availability:** Global Orchestrations, incident suppression, and variables are available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). Use Global Orchestration rules to standardize the triage process across your entire organization. 1. Create a [Global Orchestration](/ai-automation/aiops/event-orchestration#global-orchestrations). You will send your events to the orchestration's integration. 2. Create an [Event Count Cache Variable](/ai-automation/aiops/event-orchestration/cache-variables#configure-event-orchestration-cache-variables). You can use this to count the number of specific events received within a designated timeframe. 3. Create a rule with an event condition to suppress any known false positive events: 1. Under **When should events be routed here?**, select **If events match certain conditions**. 2. Define a condition that will match your false positive events. For example, if `event.summary` matches part (contains) `[No error]`. Click **Next**. 3. Under **What action(s) should be applied?**, select **Suppress incident and notifications**. 4. Click **Save**. 4. Create an **Else** rule with an event condition to evaluate the current cache variable count: 1. Under **When should events be routed here?**, select **If events match certain conditions**. 2. In the field selector, choose **Cache Variable** and add your cache variable's name. Configure your desired threshold for when an incident should be created. For example, if `cache_var.myEventCount` is greater than or equal to `2`. Click **Next**. 3. Under **What action(s) should be applied?**, choose your desired priority and/or severity level for these incidents. 4. Click **Save**. 5. Create a final **Else** rule to set a lower priority and/or severity for incidents that do not pass the event count threshold set in the previous rule: 1. Under **When should events be routed here?**, select **Always (for all events)** and click **Next**. 2. Under **What action(s) should be applied?**, choose your desired priority and/or severity level for these incidents. 3. Click **Save**. ![Standardized triage example](/images/kb/97d35b9dad026a4824f9c389a52a46318cbad2747df30d5d376560cf7b9b90b5-global-orchestration-example-triage.webp) *Standardized Triage Example* With this configuration in place, any event sent to the global orchestration is evaluated by these rules. If the event is a false positive and matches the condition set in step three, it is automatically suppressed and does not create an incident. If the event does not meet that condition, it increments the cache variable count, is routed to a service, and creates an incident on that service. The current event count for the cache variable determines whether the incident has a high or low priority and/or severity. ## Notification Management for Specific Incidents > **Availability:** Dynamic Escalation Policy Assignment is available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). Leverage Dynamic Escalation Policy Assignment to notify a Subject Matter Expert (SME) instead of the current on-call user when an incident requires a specific skill set to resolve. 1. Create an [escalation policy](/incident-management/schedules/escalation-policies#create-an-escalation-policy) with the SME user in the first level. - If the SME should be on-call 24/7, add them as a [user target](/incident-management/schedules/escalation-policies#escalation-targets). Otherwise, create a [schedule](/incident-management/schedules/schedule-basics#create-a-schedule) to define the hours the user should be on-call. 2. In your global orchestration, create the following rule: 1. Under **When should events be routed here?**, select **If events match certain conditions**. 2. Define a condition that will match events indicating a specific SME should be notified instead of the current on-call user. For example, if `event.summary` matches part (contains) `Database error`. Click **Next**. 3. Under **What action(s) should be applied?**, locate **Override service's assigned escalation policy with this policy** and select your desired escalation policy from the dropdown. 4. Click **Save**. ![Override escalation policy with SME](/images/kb/9b8c1a0b9f28de87a6bed2c23edf5a729b774c9ee05b0bfdaaefe727100f577e-global-orchestration-example-sme-override.webp) *Override Escalation Policy with SME* When the orchestration receives an event that matches the condition, the selected escalation policy is used for the incident, regardless of which service the event is routed to. ## Route Alerts with Dynamic Service Routes > **Availability:** Dynamic routing, dynamic field enrichment and extraction, and variables are available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). Use Global Orchestrations to standardize the event format and automatically route events to the correct service with a dynamic routing rule. A dynamic routing rule evaluates all events and does not have conditions. Instead, dynamic routing rules route events to services based on the **Service name** or **Service ID** included within the payload. If service details are not included in your initial payload, you can update the payload with dynamic field enrichment and extraction. 1. In your global orchestration, create a rule with the following actions: 1. Create a [rule variable](/ai-automation/aiops/event-orchestration#create-custom-rule-variables) and use regex to extract the desired value from an event field. 2. Create an [event field](/ai-automation/aiops/event-orchestration#event-fields) (for example, `custom_details.service_route`) and use the rule variable you created to set the value. 2. In your global orchestration, navigate to the **Service Routes** tab. 3. Create a new [dynamic route](/ai-automation/aiops/event-orchestration#create-a-dynamic-routing-rule) and enter the event field you created in step one. ![Dynamic routing rule](/images/kb/68e695313a8c2d37ac9b34ec344cd74a7259712a7c46abcf0685836b87ebcc5d-e7966f6a744009e1a43b8166a3b1e6d8f6a5374202ef5bdbea352a02095623ad-event-orchestation-examples-dynamic-routing.webp) *Dynamic Routing Rule* When the orchestration receives an event with a valid service name in the event field, it automatically routes it to that service. The event can be processed further by the service's orchestration rules if desired. ## Automated Remediation for Specific Incidents > **Availability:** This example uses Automation Actions, which are available on PD Reliability Platform plans, as well as Business, Enterprise for Incident Management, and Digital Operations (Legacy) plans. > > Accounts must have the PagerDuty Automation Actions add-on and [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). > > [Contact the Sales team](https://www.pagerduty.com/contact-sales/) if you are interested in [PagerDuty AIOps](/ai-automation/aiops/overview), or [fill out this form](https://www.pagerduty.com/contact-us/automation-actions/) if you are interested in Automation Actions. You can pause notifications and suspend alerts for a set duration while simultaneously triggering a remediation automation with an [Automation Action](/ai-automation/automation/automation-actions). If the automation successfully resolves the issue, an incident will not trigger. If the pause duration expires without a resolution, the incident will trigger as normal. Configure this within a service orchestration by following the steps below. 1. In your service orchestration, [create a rule](/ai-automation/aiops/event-orchestration#configure-a-global-or-service-orchestration-rule) with your desired conditions. 2. Under **Basic Event**, enable **Pause notifications**. Enter a value (in seconds) for **Suspend alert for \_\_\_ seconds before triggering an incident**. Set a pause duration long enough for your entire automation to complete. 3. Under **Automation** → **Automation Actions**, enable **Use Automation Actions if an event reaches this rule**. 4. For **When should we run this Action?**, select **Automatically when Alert is suspended/paused**. 5. For **Automated Action**, select your configured [Automation Action](/ai-automation/automation/automation-actions). ![Configured actions for auto remediation](/images/kb/6c739c07bc7b2d0771adc8cd6e200cafb7f0edc71a681494b768068551f7b3b8-event-orchestration-examples-auto-remediation.webp) *Configured Actions for Auto Remediation* ## Disable System Auto Resolve for High Priority Incidents Ensure a human — not an automated system event — is responsible for resolving all high priority incidents by automatically blocking resolve events for specific incidents. 1. Create a [Custom Field](/incident-management/incidents/custom-fields-on-incidents#create-a-custom-field), which will use event data in the incident workflow. 2. Create a [Cache Variable](/ai-automation/aiops/event-orchestration/cache-variables#step-2-create-a-new-cache-variable) in your desired orchestration: 1. For **Type**, choose **External Data**. 2. For **Data Format**, choose **Text String**. 3. Within your orchestration, create a new rule with the following: 1. In **Step 1: When should this rule be applied?**, select **If events match certain conditions**. - Using the Cache Variable you created, create the following condition using the Advanced PCL condition editor: `not cache_var.your_new_cache_variable matches part event.dedup_key` 2. In **Step 2: What action(s) should be applied?**, select **Custom Fields** → **Add Custom Incident Field**. - Under **Custom field to set**, select the Custom Field you created earlier. For **Replace with value**, enter `event.dedup_key`. 3. Click **Save**. 4. Create an **Else** rule with the following: 1. In **Step 1: When should this rule be applied?**, select **Always (for all events)**. 2. In **Step 2: What action(s) should be applied?**, select **Alert Data**. Enable the **Always trigger an alert** option. 3. Click **Save**. 5. Create an [Incident Workflow](/ai-automation/automation/incident-workflows#create-an-incident-workflow) to prevent auto resolves for matching incidents: 1. Click **Add Trigger** and select **Conditional trigger**. Configure the trigger as follows: - **When should this Workflow start?**: Select **When conditions are met**. - Create the following condition using the Advanced PCL condition editor: `incident.priority matches 'P1' and not incident.custom_fields.your_custom_field == ''` - Click **Save**. 2. Click **Add Action**. Select **Append to a Cache Variable value** and follow the steps in the [Workflow Actions article](/workflow-actions/pagerduty-aiops/append-to-a-cache-variable-value) to configure this action. Enter your custom field in the **Value** field. 6. Create a second Incident Workflow to remove the Cache Variable's current value once the incident is resolved: 1. Click **Add Trigger** and select **Conditional trigger**. Configure the trigger as follows: - **When should this Workflow start?**: Select **When conditions are met**. - **All of the following conditions must be met**: Create two conditions: - `Status matches Resolved` **and** - `Resolve Reason does not match merge` - Click **Save**. 2. Click **Add Action**. Select **Remove from a Cache Variable value** and follow the steps in the [Workflow Actions article](/workflow-actions/pagerduty-aiops/remove-from-a-cache-variable-value) to configure this action. Enter your custom field in the **Value** field. ## Track Event Spikes with Cache Variables > **Availability:** [Cache Variables](/ai-automation/aiops/event-orchestration/cache-variables) and threshold conditions are available with [Advanced Event Orchestration](/ai-automation/aiops/event-orchestration/pricing-tiers#advanced-event-orchestration). Use Cache Variables to count events over a rolling time window and an event orchestration rule to trigger an incident when the count exceeds your defined threshold. ### Step 1: Create a Cache Variable 1. In your orchestration, click **View Cache Variables**. 2. In the Cache Variables side panel, click **+ Variable**. 3. For **Variable Type**, select **Event Count**. 4. Enter a descriptive **Name**, for example: `event_spike_threshold`. 5. For **Count matching events over the last**, enter the window you want to count events with a maximum of `86400` (24 hours). Choose a duration that reflects your normal event cadence. 6. For **When should this variable be updated?**, select **Always (for all events)**. 7. Click **Save**. > **Tips:** - Shorter windows (for example, 60–300 seconds) help detect bursty spikes; longer windows (for example, 1,800–3,600 seconds) help detect sustained increases. > - You can create multiple Event Count variables per service (for example, five-minute and one-hour windows) to differentiate burst from sustained noise. ### Step 2: Create the Orchestration Rule 1. In your orchestration, add a new rule in a position where it will be evaluated and not suppressed by a subsequent rule. If you use suppression rules, place the spike detection rule before them or ensure your suppression logic will not catch spike events. 2. Under **When should this rule be applied?**, select **If events match certain conditions**. 3. In the field selector, choose **Cache Variable** and add your variable (for example, `cache_var.event_spike_threshold`). 4. In the operator dropdown, select **is greater than**. 5. Enter the spike **Threshold** value — the number of events within your window that should trigger an incident (maximum `999`). Pick a value aligned to your normal event volume and the duration you defined. 6. Click **Next**. 7. Under **What action(s) should be applied?**, select your desired actions. Common choices include: - **Always trigger an alert** to ensure an incident is created. - **Priority** and/or **Severity** to elevate visibility (for example, `P2` and `critical`). - **Custom Fields** or **Tags** (for example, `spike_detected: true`, `window_seconds: 300`, `threshold: 50`). 8. Click **Save**. After saving, generate test traffic or replay sample events to verify that the count crosses your threshold as expected. Review the resulting incidents and Event Analytics to confirm the rule's usefulness, then adjust the time span and threshold to balance sensitivity and noise. > **Important:** - If you use additional rules that suppress alerts, verify ordering so the spike detection rule is not negated by later suppression. > - Thresholds should be tuned to reduce false positives — start higher and step down as you observe behavior. ## Track Heartbeat Events with Cache Variables Event Orchestration can use Cache Variables and webhooks to track heartbeat events for AIOps accounts. If an orchestration does not receive a heartbeat within the user-defined window (maximum 4 hours), it creates an incident. This flow works as follows: - First event: create and suspend → - Next event on time: resolve previous, save new key as cache variable → - Missed event: resume alert, open incident, do not auto-resolve. To track heartbeat events, you need to create two cache variables, an orchestration rule to resolve alerts, and an if/else rule to capture your first heartbeat event. ### Step 1: Create Two Cache Variables 1. Create an Event Data Cache Variable: 1. Create a Cache Variable using **Event Data (CEF)** and name it accordingly. 2. Extract the `dedup_key` field from the current event. 3. Set the condition for events where `event.event_action` matches `trigger`. 2. Create an Event Count Cache Variable: 1. Create a Cache Variable using **Event Count** and name it accordingly. 2. Set the duration for your desired heartbeat time window (for example, 300 seconds). 3. Set the condition for events where `event.event_action` matches `trigger`. ### Step 2: Create an Orchestration Rule to Resolve Alerts 1. Add Conditions: 1. Set the Event Data Cache Variable to `exists`; and 2. Set the Event Count Cache Variable >= 1; and 3. Set `event.event_action` matches `trigger`. 2. Add Action: 1. Suspend the alert for the desired heartbeat time window **+ five seconds** (for example, 305 seconds). The additional time is a buffer to allow the webhook to resolve the previous alert. 2. Create a webhook: 1. Under **Automation** → **Webhook Actions**, trigger a webhook **Automatically when Alert is suspended/paused**. 2. Enter a **Name** for the action. 3. Add the webhook URL: `https://events.pagerduty.com/v2/enqueue` 4. Add the following **Body fields**: - `routing_key`: copy the integration key from your Event Orchestration - `dedup_key`: `{{EVENT DATA CACHE VARIABLE NAME}}` - `event_action`: `resolve` - Additional fields may be required depending on the routing rules within the Event Orchestration, so that the event lands on the correct service to resolve the alert. This is not required if the Event Orchestration has Global Dedup configured. ### Step 3: Create an If/Else Rule to Capture the First Heartbeat Event 1. Add Conditions: 1. Set `event.event_action` matches `trigger`; and 2. Set the Event Count Cache Variable \< 1. 2. Add Action: 1. Suspend the alert for the desired heartbeat time window **+ five seconds** (for example, 305 seconds). ### Summary On the first heartbeat, there is no alert to resolve, so the alert is suspended and its `dedup_key` is stored in the Event Data Cache. For each subsequent heartbeat that arrives within the time window, the previous alert is resolved via webhook using the last `dedup_key`, then the new `dedup_key` is saved to the cache variable. If a heartbeat is missed, the previously suspended alert resumes and opens an incident, and the Event Count Cache ensures that this incident is not auto-resolved by any later missed events. --- URL: https://docs.pagerduty.com/ai-automation/aiops/event-orchestration/pricing-tiers # Pricing Tiers Event Orchestration Pricing Tiers Event Orchestration has two pricing tiers that come with their own set of features and actions: - [Basic Event Orchestration](#basic-event-orchestration) - [Advanced Event Orchestration](#advanced-event-orchestration) ## Basic Event Orchestration All pricing plans have access to Basic Event Orchestration features. Basic Event Orchestration comes with the following: | Feature Suite | Features | Pricing Plan Availability | | :---------------------- | :----------------------------------------------------------------------------------- | :------------------------ | | **Event Orchestration** | - Service Event Orchestrations
- Service Routing
- Global Integration Keys | All Plans | | **Incident Actions** | - Set Priority
- Add a Note | All Plans | | **Alert Actions** | - Set Severity
- Custom Trigger/Resolve Actions | All Plans | ## Advanced Event Orchestration Advanced Event Orchestration includes all features in [Basic Event Orchestration](#basic-event-orchestration), plus additional features in the table below. Contact the [Sales team](https://www.pagerduty.com/contact-us/) if you are interested in changing your pricing tier. | Feature Suite | AIOps | Legacy plans: Event Intelligence/Digital Operations | | :--------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------ | | **Global Event Orchestration** | Available | Not available | | **Event Orchestration** | - Rule Nesting
- Scheduled/Recurring/Threshold Conditions
- Variables
- Dynamic Routing
- Dynamic Escalation Policy Overrides | - Rule Nesting
- Scheduled/Recurring/Threshold Conditions | | **Incident Actions** | - Suppress Incident
- Pause Incident
- Drop Incident | - Suppress Incident
- Pause Incident | | **Event Fields** | Dynamic Field Enrichment and Extraction | Dynamic Field Enrichment and Extraction | | **Runbook Automation Self-Hosted** | Event-driven automation with PagerDuty Automation (requires add-on) | Event-driven automation with PagerDuty Automation (requires add-on) | | **Webhooks** | Available | Available |
--- URL: https://docs.pagerduty.com/ai-automation/aiops/event-orchestration/recombining-rules # Recombining Rules Modify connections between Orchestration rules Create [Orchestrations](/ai-automation/aiops/event-orchestration) that reduce redundant rules and improve user experience by enabling multiple rules to recombine back into a single rule. ## Connect Mode You can manage connections between rules by using Connect Mode. While in Connect Mode, the ability to add or modify rule conditions and actions is disabled. > **Requirement:** Connect Mode requires at least two rulesets. A ruleset is defined as the vertical group of connected "Else" rules. > > In other words, you must have at least one nested rule to use Connect Mode. ![A nested rule in an Orchestration](/images/kb/efe8d9a8d5d4a00326955bd8b5261760ad03f8fd195954834bf5c213610a353c-recombining-rules-nested-rules.png) *A nested rule in an Orchestration* To modify rule connections, enter Connect Mode by following the steps below: 1. Navigate to your desired Orchestration: 1. For **Service Orchestrations**: Navigate to **Services** → **Service Directory** → and select your service. Select the **Settings** tab and scroll down to **Event Management** and select **View Event Orchestration Rules**. 2. For **Global Orchestrations**: Navigate to **AIOps** → **Event Orchestration** and select your Orchestration. Select the **Global Orchestration** tab. 2. Click **Connect Mode** at the bottom of the Orchestration. In Connect Mode, sets can be dragged around using the cursor to help with arranging rules. After you click **Save**, the rules are automatically moved to a structured grid. > **Save Conflicts:** If you try to save changes made in Connect Mode after another user or automation makes changes to the Orchestration's rules, you see a prompt informing you of the conflict. > > You must discard your changes to receive the latest updates. ### Create Connections To create a new rule connection: 1. Click the circular node on the right side of the rule. This highlights all valid connections. 2. Click the highlighted node of the desired rule you want to connect with. This creates a new connection. You can also click and then drag your cursor to the desired rule's node to create a connection. 3. Once you are finished with making connections, click **Save**. ### Delete Connections To remove an existing rule connection: 1. Click the desired connection line. 2. Click to delete the connection. If the deleted connection was the only connection to a set of rules, an Unconnected Set is created. You must connect all Unconnected Sets before saving your updates. --- URL: https://docs.pagerduty.com/ai-automation/aiops/legacy-event-intelligence # Legacy Event Intelligence Migrate to AIOps for expanded feature set Legacy Event Intelligence was an add-on that was priced per user license and came with a limited feature set. This product is still available to existing Event Intelligence customers, but has not been available to new customers since April 11, 2023. > **PagerDuty AIOps:** [PagerDuty AIOps](/ai-automation/aiops/overview) is the next generation of Event Intelligence. It is priced by event consumption and it has an expanded feature set. Legacy Event Intelligence users may continue using Event Intelligence, or migrate to PagerDuty AIOps. ## Legacy Event Intelligence Features Legacy Event Intelligence shares features that have been moved to PagerDuty AIOps. These features include: - [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) - [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) - [Time-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/time-based-alert-grouping) - [Auto-Pause Incident Notifications](/ai-automation/aiops/noise-reduction/auto-pause-incident-notifications) - [Past Incidents](/ai-automation/aiops/past-incidents) - [Related Incidents](/ai-automation/aiops/related-incidents) - [Outlier Incident](/ai-automation/aiops/outlier-incident) - [Probable Origin](/ai-automation/aiops/probable-origin) - [Change Events](/ai-automation/aiops/recent-changes) - [Event Orchestration](/ai-automation/aiops/event-orchestration) - [PagerDuty Automation Actions](/ai-automation/automation/automation-actions) - [Visibility Console](/incident-management/incidents/visibility-console) The features above will still be maintained, but Legacy Event Intelligence users will not receive new features or updates. Updates will apply to PagerDuty AIOps only. Please contact our [Sales team](https://www.pagerduty.com/contact-us/) about migrating to PagerDuty AIOps. --- URL: https://docs.pagerduty.com/ai-automation/aiops/migrate-to-event-orchestration # Migrate to Event Orchestration Migrate in preparation for Event Rules' upcoming end-of-life (EOL) **[Event Rules](/ai-automation/aiops/rulesets) webpages reached end-of-life (EOL) on January 31, 2025**. PagerDuty made this decision to ensure that it dedicates resources toward building the most robust and reliable event-driven enrichment and automation experience for customers. [Event Orchestration](/ai-automation/aiops/event-orchestration), the evolution of Event Rules, is currently available and is the best way for you to compress rule volumes, improve noise reduction, and more effectively automate well-understood, manual work. Event Orchestration has the same features as Event Rules and it uses the same, heavily tested backend architecture. > **Recommendation:** **PagerDuty highly recommends that you migrate to Event Orchestration as soon as possible so you can take advantage of the new functionality, such as improved UI, rule creation, APIs and Terraform support, advanced conditions, and rule nesting.** ## Migration Options You have several migration options, which are detailed below: - [Service Integration Key Migration](#service-integration-key-migration) - [REST API Migration](#rest-api-migration) - [Global Integration Key Migration](#global-integration-key-migration) - [Push-Button Rule Migration](#push-button-rule-migration) ### Service Integration Key Migration With Service Integration Key migration, you can direct your events towards existing Service Orchestration rules without having to change or update integration keys. No architecture is changed in this switch, so you do not need to change any integrations to PagerDuty. All of your events sent to a service will automatically start flowing through to Event Orchestration instead of Event Rules. To migrate your service integration keys: 1. Before performing this migration, it is recommended that you [create Event Orchestration rules for the service](/ai-automation/aiops/event-orchestration#configure-event-orchestration). If no Service Event Orchestration exists, then the default behavior is for events to trigger their event action as they normally would. 2. Next, in the PagerDuty web app navigate to **Services** → **Service Directory** and select the service that you want to migrate integration keys for. 3. Select the **Settings** tab and scroll to the **Event Management** section. 4. Click **Switch to Service Orchestrations**. 5. Once this button is clicked, all events that reach the service are evaluated against the Event Orchestration rules that have been created. ### REST API Migration Event Orchestration has a new set of APIs that allow you to nest rules together. To migrate existing APIs over to the new REST APIs, you can leverage the new [Event Orchestration Terraform Provider](https://registry.terraform.io/providers/PagerDuty/pagerduty/latest/docs/resources/event_orchestration) to create large volumes of Event Orchestration rules rapidly. [Professional services](https://www.pagerduty.com/services/) are available to help you with this process. Information on the new REST APIs can be found in the [Developer Documentation](/developer/api-changelog#2023-06-13), and information on the Event Orchestration Terraform Provider can be found in [Terraform's documentation](https://registry.terraform.io/providers/PagerDuty/pagerduty/latest/docs/resources/event_orchestration). To help get you started, here are a few endpoints you may find useful: - [List Global Rulesets](/developer/api/reference/rest/rulesets/list-rulesets) - [List Service Event Rules](/developer/api/reference/rest/services/list-service-event-rules) - [Create an Event Orchestration](/developer/api/reference/rest/event-orchestrations/post-orchestration) - [Create an Integration](/developer/api/reference/rest/event-orchestrations/post-orchestration-integration) - [Migrate an Integration to a New Orchestration](/developer/api/reference/rest/event-orchestrations/migrate-orchestration-integration) - [Update a Global Orchestration](/developer/api/reference/rest/event-orchestrations/update-orch-path-global) - [Update a Service Orchestration](/developer/api/reference/rest/event-orchestrations/update-orch-path-service) ### Global Integration Key Migration Global Integration Key migration allows you to retain your existing integration keys and have them evaluate against Event Orchestration rules instead of a Global Event Ruleset. The backend architecture for Event Orchestration is identical to Global Event Rules, so no ingestion or processing behavior changes. Events are simply evaluated against Event Orchestration rules instead of event rules. To migrate your global integration keys: > **Before You Start:** If you have not already done so, perform the following before migrating keys: > > - [Create a Global Orchestration](/ai-automation/aiops/event-orchestration#global-orchestrations) > - Ensure that you have created [routing rules](/ai-automation/aiops/event-orchestration#routing-rules) and [global or service orchestration rules](/ai-automation/aiops/event-orchestration#configure-a-global-or-service-orchestration-rule) that replicate any routing settings and event modifications that you would like to keep. > > If you do not replicate routing rules, events will no longer reach the appropriate services, and if you do not replicate the event modifications, actions will be lost. 1. Once you have created the Global Orchestration and rules described above, navigate to the orchestration in the PagerDuty web app and select **Integrations**. 2. Click **New Integration** and select **Permanently migrate integration from existing Ruleset** from the dropdown. 3. In the modal that appears, select the **Ruleset** with the integration key that you would like to migrate. 4. Note that migration is immediate. Once you click **Migrate**, the Global Ruleset will become inactive. When you are sure that you would like to move forward, click **Migrate**. 1. You should see a success message at the top of the screen confirming that the Ruleset has migrated. ### Push-Button Rule Migration If you do not want to manually re-create your service event rules in Event Orchestration, PagerDuty supports the ability to automatically migrate an account's service event rules to Event Orchestration rules. This automated migration identically re-creates your existing service event rules, retaining the same behavior and event processing outcomes in Event Orchestration. You can trigger this migration on a per-ruleset basis via the API. #### Migrate Service Event Rules to Service Event Orchestration The Push-Button Rule Migration feature leverages the API to allow you to automatically convert your Service Event Rules into Service Orchestration Rules. Read [Convert a Service's Event Rules into Event Orchestration Rules](/developer/api/reference/rest/services/convert-service-event-rules-to-event-orchestration) in the developer docs for more information. All functionality from the migrated Service Event Rules is supported in Service Event Orchestration, except in cases where the rule contains an unsupported exception. Refer to the [provided exception documentation](https://drive.google.com/file/d/19c1PE3aqAiweDLJAiZWaSne96RIjE2R6/view?usp=sharing) for details. If a service's Service Event Rules have more than 25 rules, rule nesting is used to accommodate additional rules under Service Event Orchestration. Note that this nesting is only supported to extend the number of Service Orchestration Rules on a service. Further nesting is not supported unless the account has purchased AIOps, Enterprise for Incident Management, Digital Operations (Legacy), Event Intelligence, or Enterprise for Customer Service. > **Enable Service Event Orchestration:** The migration process does not automatically enable Service Event Orchestration. This means that, while Service Orchestrations may be configured, they are not used to process incoming events unless you have [enabled Service Orchestrations](/ai-automation/aiops/event-orchestration#switch-to-service-orchestrations) on the service's **Settings** page or via the [API](/developer/api/reference/rest/event-orchestrations/update-orch-active-status). To migrate Service Event Rules to Service Event Orchestration: 1. In the PagerDuty web app, navigate to **Services** → **Service Directory** and select your preferred service. Locate the service's ID in the page's URL. 2. Use the [Convert a Service's Event Rules into Event Orchestration Rules](/developer/api/reference/rest/services/convert-service-event-rules-to-event-orchestration) endpoint to migrate the service's rules. #### Terraform If you have configured your event rules using Terraform, version 2.5.0 of the PagerDuty Terraform provider introduced support for Event Orchestration resources that can help you reproduce event rules using Event Orchestration rules instead. To reproduce Service Event Rules you will want to use the [pagerduty\_event\_orchestration\_service](https://registry.terraform.io/providers/PagerDuty/pagerduty/latest/docs/resources/event_orchestration_service) resource. To reproduce a Global Ruleset you will want to use the [pagerduty\_event\_orchestration](https://registry.terraform.io/providers/PagerDuty/pagerduty/latest/docs/resources/event_orchestration), [pagerduty\_event\_orchestration\_global](https://registry.terraform.io/providers/PagerDuty/pagerduty/latest/docs/resources/event_orchestration_global), and [pagerduty\_event\_orchestration\_router](https://registry.terraform.io/providers/PagerDuty/pagerduty/latest/docs/resources/event_orchestration_router) resources. ## Global Event Rules Migration Guidance [Event Orchestration](/ai-automation/aiops/event-orchestration) can identically replicate the features and functionality of Global Event Rules without requiring [Global Orchestrations](/ai-automation/aiops/event-orchestration#global-orchestrations). To effectively migrate your Global Event Rules to Event Orchestration PagerDuty suggests the following: 1. Create a new [Event Orchestration](/ai-automation/aiops/event-orchestration#global-integrations). 2. Create a [routing rule](/ai-automation/aiops/event-orchestration#routing-rules) for each service that appears in the Global Event Ruleset you are migrating. 3. For each service from step two, create Event Orchestration rules that replicate the actions (i.e., setting [incident priority](/incident-management/incidents/incident-priority)) from the corresponding Global Event Ruleset. 4. Once you have replicated the rules and actions, navigate to the **Integrations** section of the Event Orchestration you created and click **New Integration**. 5. From the options presented, select **Permanently migrate integration from existing Ruleset** and select the Global Event Ruleset you are migrating from the dropdown. This transfers the integration key to the new Event Orchestration. No data will be lost as part of this process and events immediately start using the new Event Orchestration rules you created. ![A screenshot of the PagerDuty UI detailing the option to migrate an integration from an existing Ruleset](/images/kb/a695f4ee840bdeb8e1805754000a086b665131fb8187e0bee5e1b888660bdfa9-migrate_ruleset.webp) *Migrate integration from existing Ruleset* > **Event Evaluation Order:** Global Event Rules are not evaluated before events are routed to services, whereas Global Event Orchestration rules are. This change in behavior allows Global Event Orchestration to reduce the number of required rules and improves downstream routing logic. ## FAQ **What happened to my Event Rules?** As of the end-of-life (EOL) date, January 31, 2025, event rulesets are no longer visible in the PagerDuty web app. Access and modifications to event rules are still possible via the [API](/developer/global-event-rules-api). **What happens if I don't migrate my Event Rules?** You can migrate your event rules to Event Orchestration via the API, however you are not obligated to do so. If you choose not to migrate your event rules before the end of life date, understand that event rules will become unsupported and PagerDuty will not maintain backwards compatibility with any new features that are released for Event Orchestration. This means that migrating event rulesets to Event Orchestration after the deadline increases the likelihood that PagerDuty will not be able to identically mirror the original behavior from event rules. **What's the difference between Event Rules and Event Orchestration?** Event Orchestration is a direct upgrade from Event Rules. Basic Event Orchestrations can perform all the same basic event processing actions that event rules can perform with the added benefits of improved UI, better rule creation, APIs and Terraform support, and advanced conditions. For customers with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, Enterprise for Incident Management, or Digital Operations (Legacy) plans, Advanced Event Orchestrations bring even more functionality to the table. This includes contextual conditions, webhooks, paused incident notifications, rule nesting, and a direct integration with Automation Actions. Below are a few of the key ways that Event Orchestration is superior to Event Rules: - **Easier to use**: Architecturally, Event Orchestration takes advantage of PagerDuty's more modern approach to front-end development by leveraging React as its core frontend stack. This allows customers to navigate their rules with less lag and greater support for accessibility improvements in the future. - **More complex event processing**: Because of the condition language that Event Orchestration supports and the capability to nest rules, customers using Event Orchestration can perform complex event processing actions with a fraction of the configuration effort. What could once be accomplished with 10 event rules can now be done with 1 Event Orchestration rule. - **More robust support for automation**: You can trigger webhooks with custom headers or automation actions. - **More precise event processing**: Rule nesting allows you to execute automations with a high degree of precision as customers can itemize out in detail each known failure start for their systems, deploying automation to each with confidence. **Do I have to create all my event rules again in Event Orchestration?** PagerDuty highly recommends using the Service Integration Key, REST API or Global Integration Key migration methods listed above to migrate to Event Orchestration. That said, you also have access to an automated rule migration tool. This tool automatically copies all existing event rules into Event Orchestration rules on a per ruleset basis, initiated by a user via [API](/developer/api/reference/rest/services/convert-service-event-rules-to-event-orchestration). After the EOL date, event rules can continue to process events, however they are only accessible via API. **Is Event Orchestration a true replacement for Event Rules, or will I lose functionality?** Event Orchestration has the same features as Event Rules with the added benefit of being built on a more sustainable front-end framework. The backend for Event Orchestration is identical to the backend for Event Rules, allowing Event Orchestration to benefit from the years of testing that has been done with Event Rules. This shared backend also means that the processing outcomes for events sent to Event Orchestration are identical to Event Rules, with the added benefit of having easier-to-understand rules. **Is PagerDuty able to provide more support for my migration?** There is support available from the [Professional Services team](https://www.pagerduty.com/services/) for customers who need it. If you are interested in this, contact your account team and they can help set this up. **Where can I learn more about Event Orchestration?** Read the [Event Orchestration](/ai-automation/aiops/event-orchestration) article for more information. PagerDuty University also offers an [Event Orchestration eLearning Module](https://university.pagerduty.com/event-orchestration) course. **Who can I contact if I have more questions?** If you have additional questions, [reach out to the Support team](https://www.pagerduty.com/contact-us/#contact-support) or your Customer Success representative. --- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction # Noise Reduction Minimize noise, group alerts intelligently, and auto-pause transient notifications Not every alert should be an incident. PagerDuty's noise reduction capabilities — part of [PagerDuty AIOps](/ai-automation/aiops/overview) — leverage data science and machine learning to limit system noise and reduce alert fatigue. This means fewer incidents and interruptions for on-call responders, richer context around the incidents that do trigger, and lower resolution times. You can access the Noise Reduction homepage in the PagerDuty web app by navigating to **AIOps** → **Noise Reduction**. Here you can see an overview of noise reduction features: - [Alert Grouping](#alert-grouping) - [Auto-Pause Incident Notifications](#auto-pause-incident-notifications) You can create or edit settings from this central page. ![The PagerDuty web app UI showing an overview of Noise Reduction configurations](/images/kb/8060281b003eb62defac4228813b1d95745e6bdd8dd05070085a7d57d42beca1-noise_reduction.webp) *Noise Reduction settings* > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). ## Alert Grouping [Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping) groups alerts into an incident on a service using different grouping techniques. [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping) expands the scope of alert grouping by applying a setting across multiple services. ## Auto-Pause Incident Notifications [Auto-Pause Incident Notifications](/ai-automation/aiops/noise-reduction/auto-pause-incident-notifications) automatically pauses notifications for transient alerts — alerts that typically auto-resolve on their own — giving them time to resolve before interrupting responders. --- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/alert-grouping # Alert Grouping Consolidate related alerts into a single incident to cut noise, reduce alert fatigue, and speed up response across one or more services. Alert Grouping is designed for incident responders and operations teams who want to streamline their workflow by reducing noise from multiple alerts and focusing on meaningful incidents. By consolidating related alerts into a single incident, this feature minimizes alert fatigue and accelerates response times, allowing teams to manage incidents more effectively across multiple services. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **Required User Permission:** Users with the following roles can edit a service’s Alert Grouping settings: > > - Account Owner > - Admin and Global Admin > - User > - Manager base role and team roles > - Manager team roles can only manage services associated with their team. > **Global Alert Grouping:** By default, Alert Grouping groups alerts on a single technical service. If you’d like to expand scope across more than one service, please read [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping), which allows you to configure a multiservice group, and group alerts from different services into a single incident. ## View Alert Grouping In the PagerDuty web app, navigate to **AIOps** → **Noise Reduction** and select the tab **Alert Grouping** for an overview of the services in your account that have Alert Grouping configured. Enter a term in the search box to filter the list of services displayed. ![A screenshot of the PagerDuty web app showing the Noise Reduction homepage](/images/kb/59dce2c8c48f0b6685a4e7d7ef45c03436ab5793d112da3365d7fbf8382d88c7-noise_reduction.webp) *Alert Grouping on the Noise Reduction overview page* ## Enable Alert Grouping There are two places to enable Alert Grouping: - [Noise Reduction](#noise-reduction) - [Service Settings](#service-settings) ### Noise Reduction In the PagerDuty web app: 1. Navigate to **AIOps** → **Noise Reduction**. 2. Click **New Grouping**. 3. In the dropdown **Select Services to group the alerts**, select one or more services to group alerts across services. 1. Read [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping) for more information about what to expect when you select more than one service. 4. Select an alert grouping method and, if applicable, enter your grouping criteria. 1. Inputs will vary depending on the grouping method you select. Please see the section [Grouping Methods](#grouping-methods) below for more information about each. 5. Click **Save**. ### Service Settings In the PagerDuty web app: 1. Navigate to **Services** → **Service Directory** and select your desired service. 2. Select the **Settings** tab and click **New Grouping**/**Edit** in the section **Reduce Noise**. 3. In the dropdown **Select Services to group the alerts **, _optionally_ add more services to group alerts across services. 1. Read [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping) for more information about what to expect when you select more than one service. 4. Select an alert grouping method and, if applicable, enter your grouping criteria. 1. Inputs will vary depending on the grouping method you select. Please see the section [Grouping Methods](#grouping-methods) below for more information about each. 5. Select a value from the dropdown for the grouping time window. 6. Click **Save**. ## Update Alert Grouping There are two places to enable Alert Grouping: - [Noise Reduction](#noise-reduction-1) - [Service Settings](#service-settings-1) ### Noise Reduction In the PagerDuty web app: 1. Navigate to **AIOps** → **Noise Reduction** and select the **name** of your desired service, _or_ select → **Edit** to the right of your desired service. 1. **Note**: Enter a service's name in the search box to show matching results. 2. Make your required configuration changes, e.g., add services to the multiservice group, adjust the matching criteria, the grouping time window value, or select a different [Grouping Method](#grouping-methods). 3. Click **Save**. ### Service Settings In the PagerDuty web app: 1. Navigate to **Services** → **Service Directory** and select your desired service. 2. Select the **Settings** tab and click **Edit** in the section **Reduce Noise**. 3. Make your required configuration changes, e.g., add services to the multiservice group, adjust the matching criteria, the grouping time window value, or select a different [Grouping Method](#grouping-methods) . 4. Click **Save**. ## Delete Alert Grouping There are two places to enable Alert Grouping: - [Noise Reduction](#noise-reduction-2) - [Service Settings](#service-settings-2) ### Noise Reduction In the PagerDuty web app: 1. Navigate to **AIOps** → **Noise Reduction** and select → **Delete** to the right of your desired service. 2. In the confirmation modal, click **Delete**. 1. **Note**: This action cannot be undone. ### Service Settings In the PagerDuty web app: 1. Navigate to **Services** → **Service Directory** and select the name of your desired service. 2. Select the **Settings** tab and click **Edit** in the section **Reduce Noise**. 3. In the bottom-left, click **Delete**. 4. In the confirmation modal, click **Yes, turn off**. ## View Alert Grouping on an Incident When enabled, you can see Alert Grouping actively grouping alerts on an incident’s detail page under the Alerts tab. The Grouping Now label indicates that an incident is using alert grouping. You can also see how many alerts are grouped into the incident, as well as their status. In the example below, two alerts have been grouped: one is triggered and the other is resolved. Click **Alert grouping details** to see which grouping method is in effect (Intelligent, Content-Based, Unified, or Time-Based Alert Grouping), when grouping started, and the conditions when grouping will stop. ## Grouping Methods PagerDuty offers a variety of grouping methods depending on your organization’s needs. Select one of the following grouping methods for more information, including configuration details: - [Intelligent](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) - [Alert Content](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) - [Intelligent + Alert Content](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping) - [Time only](/ai-automation/aiops/noise-reduction/alert-grouping/time-based-alert-grouping) --- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping # Content-Based Alert Grouping Use alert content to group incoming alerts into open incidents Content-Based Alert Grouping enables custom alert grouping on services with predictable, homogenous alert data, without the need to train an algorithm. Alerts that share an exact match on a set of chosen fields group together into the most recent open incident. Grouped alerts mean fewer incidents and noise reduction, richer context on incidents that do trigger, and lower resolution times. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. > **Legacy Availability:** Content-Based Alert Grouping is also available with [Legacy Event Intelligence](/ai-automation/aiops/legacy-event-intelligence). > > Note that newer features (e.g., [Global Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping#alert-content)) are only available to PagerDuty AIOps customers, and are not available on Legacy Event Intelligence plans. > > Contact the [Sales Team](https://www.pagerduty.com/contact-us/#contact-sales) to upgrade your account's pricing plan. > **Required User Permissions:** Users with the following roles can edit a service's Alert Grouping settings: > > - Account Owner > - Admin and Global Admin > - User > - Manager base role and team roles > - Manager team roles can only manage services associated with their team. ## Enable Content-Based Alert Grouping > **Important Notes:** - Content-Based Alert Grouping requires data to be in [Common Event Format (PD-CEF)](/developer/api/pd-cef). > - Alerts only group when all selected fields have an _exact_ match. 1. Select **Services** → **Service Directory** → click the **name** of the service where you would like to use Content-Based Alert Grouping. 2. Select the **Settings** tab and click **New Grouping** _OR_ **Edit** under the **Reduce Noise** section. 3. Select **Alert Content**. 1. _Optional_: To group alerts across multiple services, select additional services in the dropdown **Select Services to group the alerts** at the top of the page. Read [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping#alert-content) for more information. 4. Select whether you want alerts to group if **All** or **Any** specified fields match. - If you select **All**, alerts group when there is an exact match on _every specified field_. - If you select **Any**, alerts group when there is an exact match on _at least one of the specified fields_. 5. There are two methods for specifying alert grouping fields: - Click **See Recent Alerts** to open a pane on the right side of the screen. Select a recently-received alert to see its payload. Click the fields you want to add to your grouping criteria and they are added to your configuration. _OR_ - Select your preferred **Field Name(s)** from dropdown: - **Class** - **Component** - **Group** - **Severity** - **Source** - **Summary** - **Custom Details**: To group on the value in a custom field, select **Custom Details** from the dropdown, and enter your **custom field name**. Be sure that your spelling and capitalization exactly match the alert's field. See the [FAQ below](#how-do-i-use-a-nested-custom-details-field-as-part-of-my-content-based-alert-grouping-configuration) for more information on using dot notation to access nested custom detail fields. ![Nested custom details example](/images/kb/634adf5390d5099e639bdff309c3c785ef47a67f78ab496ab933c8391ccf2704-custom_details.webp) *Nested custom details example* 6. _Optional_: If required, select **Add Field** to add an additional field to match on. 7. Select the [time window](#flexible-time-window) that you would like to group alerts in. 8. Click **Save**. ### Flexible Time Window You can configure the grouping time window as part of the Content-Based Alert Grouping setting. The time window can be between five minutes and 24 hours. The time window is a rolling window and counted from the most recently grouped alert. The window extends each time an alert is grouped, up to 24 hours, or until the incident is resolved. If an alert comes in after 24 hours, it triggers a new incident. ## Update Content-Based Alert Grouping After [enabling Content-Based Alert Grouping](#enable-content-based-alert-grouping), you can adjust the grouping criteria at any time. > **Previously-Saved Criteria will be Ignored:** Note that Content-Based Alert Grouping will ignore any previously-saved criteria and will start grouping alerts into a new incident every time you save. In other words, Content-Based Alert Grouping does not consider any previously-saved criteria when determining whether to group an alert or trigger a new incident. 1. Select **Services** → **Service Directory** → click the **name** of the service where Content-Based Alert Grouping is in use. 2. Select the **Settings** tab and click **Edit** under the **Reduce Noise** section. 3. Select **Alert Content**. 4. Make the required changes and click **Save**. ## Disable Content-Based Alert Grouping To select a different grouping method, or to disable Alert Grouping altogether: 1. In the web app, navigate to **Services** → **Service Directory** → select the **name** of your desired service. 2. Select the **Settings** tab and click **Edit** next to **Reduce Noise**. 3. Select the desired grouping method and click **Save**. 1. Alternatively, you can entirely disable alert grouping on the service by clicking **Delete** and confirming **Delete** again in the modal. ### Delete a Field from Your Matching Criteria If you have configured more than one field as part of your matching criteria, there is an option to delete the individual fields. 1. Navigate to **Services** → **Service Directory** → select the **name** of your desired service. 2. Select the **Settings** tab and click **Edit** next to **Reduce Noise**. 3. To the right of the field(s) you wish to delete, click . ![Delete criteria](/images/kb/5a912b37f08578871313b9fceceb867a9c9d2d3d76317a46026a84fd05c402ad-remove_grouping_field.webp) *Delete criteria* 4. Click **Save**. ## Email Events Content-Based Alert Grouping supports email alerts generated through service-level email integrations, as well as [Event Orchestration](/ai-automation/aiops/event-orchestration#send-events-to-global-orchestrations). This includes any alerts that have their `custom_details` field transformed in Event Orchestration's [Event Fields](/ai-automation/aiops/event-orchestration#event-fields) feature. Since email events are not structured in JSON, the format that [Common Event Format (PD-CEF)](/developer/api/pd-cef) requires, there are some differences in how these alerts are handled while configuring Content-Based Alert Grouping on incidents. ### Configuration While configuring Content-Based Alert Grouping or [Unified Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping), the **See Recent Alerts** option displays a preview of recent alerts. However, if the alert contains a `custom_details` field that was transformed in [Event Orchestration](/ai-automation/aiops/event-orchestration), this field's updated value does not appear in the **See Recent Alerts** preview. The **See Recent Alerts** preview always displays the `custom_details` field as it appeared in the email headers. ### Alerts Table The [Alerts Table](/incident-management/incidents/alerts/alerts-table) displays email events with its [fields mapped](#field-mapping) to corresponding PD-CEF fields, but does not convert them into CEF events. If you would like to view the email alert in a formatted view, click **View Message** below an expanded alert in the Alerts Table. ### Field Mapping Content-Based Alert Grouping maps some email fields to a corresponding [Common Event Format (PD-CEF)](/developer/api/pd-cef) field. For example, if you are grouping based on **Source**, Content-Based Alert Grouping uses the email event's **From** field to consider a match. With this in mind, it shows in the incident timeline that the alert was added based on **Source**. The table below shows a complete list of email fields and their corresponding PD-CEF fields: | Email Field | PD-CEF Field | | :------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------- | | From | Source | | Subject | Summary | | Subject | `custom_details.subject` (This field always contains the original email subject, even if the Summary field was transformed in Event Orchestration.) | | Text Body | `custom_details.plain_body` | | HTML Body (in multipart emails) | `custom_details.html_body` | | To | `custom_details.to` (i.e., an array of 1 or more recipients) | | CCs | `custom_details.cc` | | Email Headers | `custom_details.` (e.g., `message-id`, `from`, `received` `content-type`, as well as an any custom headers the mailer adds) | ## FAQ **If I select `Any` for field matching criteria and the following occurs: Alert A has an exact match with Alert B on one specified field; Alert B has an exact match with Alert C on a different field; Alert C has no matching fields with Alert A. How are alerts grouped?** Alert A and B would group into one incident. It would create a new incident for Alert C. Content-Based Alert Grouping does not chain fields with subsequent alerts, and alerts group into the most recent incident where there is an exact match. **How do I use a nested Custom Details field as part of my Content-Based Alert Grouping configuration?** Use dot notation to specify nested **Custom Details** fields, such as `field_name.nested_field1`. **Note**: Dot notation will only work if your field is nested within an object (not a string). For example, if your custom details look like `{"field_name": "nested_field1 = value, nested_field2 = value"}` , entering `field_name.nested_field1` will _not_ allow you to group on the nested field. If you want to group on a value from a string, you can extract it using [Event Orchestration](/ai-automation/aiops/event-orchestration#event-fields). **Can I manipulate or merge content of different fields to use as alert grouping criteria?** Yes, with [Event Orchestration](/ai-automation/aiops/event-orchestration). **Can I use Content-Based Alert Grouping to group across multiple services?** Yes, read [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping) for more information about how to group alerts from multiple services into a single incident.
--- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping # Global Alert Grouping Combine similar alerts into a single incident to reduce notification noise and provide more context across multiple services Global Alert Grouping reduces noise by grouping alerts across more than one technical service. Global Alert Grouping allows you to select the scope of services to evaluate for alert grouping. Global Alert Grouping supports the following methods: - [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) - [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) - [Unified Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping) > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. > **Required Permissions:** If you have one of the following roles, you can edit a service’s alert grouping settings: > > - Account Owner > - Admin and Global Admin > - User > - Manager base role and Team roles > - Manager Team roles can only configure the services for which they are assigned a Manager role. ## Enable Global Alert Grouping Global Alert Grouping groups alerts across multiple technical services. 1. In the PagerDuty web app, navigate to **Services** → **Service Directory** and click the name of your desired service. 2. Select the **Settings** tab and click **Edit** next to **Reduce Noise**. 3. Select one of the following options and configure your preferences: - [**Intelligent**](#intelligent) - [**Alert Content**](#alert-content) - [**Intelligent + Alert Content**](#intelligent-alert-content) 4. Click **Save**. ### Intelligent Selecting **Intelligent** enables Intelligent Alert Grouping on your service. There are differences in functionality depending on whether you select more than one service. The information in this section is relevant when you select more than one service. Read [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) if you select a single service. #### Advanced Options Advanced Options allow you to customize which alert fields the grouping model analyzes when determining textual similarities and reset the grouping model's learner cache. - [Configure Grouping Fields](#configure-grouping-fields): Choose up to five fields, including standard [Common Event Format (PD-CEF)](/developer/api/pd-cef) fields and custom details, for a comprehensive alert grouping analysis. - [Reset Learner Cache](#reset-learner-cache): Reset the learner cache. ##### Configure Grouping Fields By default, Intelligent Alert Grouping uses the summary field of alerts to determine textual similarity. Depending on your data, however, you can use alternate fields to determine similarity. In the PagerDuty web app: 1. While [configuring Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping#enable-intelligent-alert-grouping), click the dropdown **Advanced Options**. 2. In the section Select Fields, select a field from the dropdown you want the Intelligent Alert Grouping model to consider for textual similarity. 1. If you select Custom Details, enter a Custom field name. 3. Optional: Click **Add Field** and select another field. **Note**: You can repeat this step as needed to select up to five fields. 4. At the bottom of the page, click **Save**. > **Considerations:** Summary is the only field that PagerDuty requires. If you do not select Summary as one of the fields, all selected fields can be blank. In such cases, alert grouping does not occur because the selected fields are empty. > > When any field selected as part of the Advanced Options configuration is blank, the system does not analyze or consider those fields for Intelligent Alert Grouping. The grouping model only considers the fields with available data. > > The selected fields are analyzed for textual similarity and do not evaluate based on an exact match between fields. To specify exact matching criteria, use the [Intelligent + Alert Content](#intelligent-alert-content) option. > > The maximum number of characters for all selected fields is 1000. ##### Reset Learner Cache This option allows you to reset the grouping model's learner caches. This is useful if a data structure for a service changes significantly, or after a period of testing. In the PagerDuty web app: 1. While [configuring Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping#enable-intelligent-alert-grouping), click the dropdown **Advanced Options**. 2. Activate the checkbox **Reset learner cache**. 3. At the bottom of the page, click **Save**. #### Algorithm Behavior The Intelligent Alert Grouping algorithm observes real-time alert data and incident history, and adapts as new alerts trigger on a service. After you have [enabled Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping#enable-intelligent-alert-grouping) on a service, no explicit configuration is required, though you can optionally configure the [Flexible Time Window](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping#flexible-time-window). Intelligent Alert Grouping groups an alert into an existing incident when the model detects the following criteria. The reason for grouping each alert appears in the incident timeline. - **Textual similarity**: The Intelligent Alert Grouping algorithm deems the alerts similar based on alert title similarity. - **Past co-occurrences**: The Intelligent Alert Grouping model detects a high rate of co-occurrence between alerts. - **Learning from prior incident merges**: You have merged prior similar alerts and the algorithm learns from this behavior. Alerts that do not meet these criteria do not group and trigger a new incident. When a Global Alert Grouping setting is enabled, Intelligent Alert Grouping evaluates alerts from all services in a global setting, and groups alerts from one or more services into the same incident when the criteria in the previous section are met. New alerts group under the first created incident and notifications go to that incident's responder. The algorithm also reacts to feedback from you and your team. The best way for the algorithm to learn and adapt to new grouping behaviors is to manually merge related incidents, and to manually move alerts to a different incident when they are not related. For more information about moving alerts from one incident to another, see [Merge Incidents](/incident-management/incidents/edit-incidents#merge-incidents). You can also automatically update alert titles using [Event Orchestration](/ai-automation/aiops/event-orchestration#event-fields), which influences the algorithm. > **Tip:** Merging and unmerging alerts through the REST API does not affect the Intelligent Alert Grouping algorithm. Only manual merges and unmerges in the PagerDuty web app influence the algorithm. ### Alert Content Selecting **Alert Content** enables Content-Based Alert Grouping on your service. Content-Based Alert Grouping enables customized alert grouping on services with predictable, homogenous alert data, without the need to train an algorithm. With Content-Based Alert Grouping, alerts that share an exact match on a set of chosen fields group together into the most recent open incident. Grouped alerts mean fewer incidents and interruptions for responders, richer context on the incidents that trigger, and lower resolution times. To learn more about the Alert Content option, read [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping). ### Intelligent + Alert Content Selecting **Intelligent + Alert Content** enables Unified Alert Grouping on your service. Unified Alert Grouping combines [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) and [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) with a flexible time window for increased precision and correlation control. Unified Alert Grouping groups alerts when alert content matches and Intelligent Alert Grouping determines alerts are similar. Alerts group only when both conditions are satisfied. To learn more about the Intelligent + Alert Content option, read [Unified Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping). ### Flexible Time Window You can configure the grouping time window as part of the Global Alert Grouping setting. The time window can be between five and 60 minutes. The time window is a rolling window and counts from the most recently grouped alert. The window extends each time an alert groups, up to 24 hours, or until the incident resolves. If an alert arrives after 24 hours, it triggers a new incident. ## View Global Alert Grouping On an Incident A primary indicator that an incident has alerts grouped from other services is the **Multiservice Group** pill, along with the description of how many alerts have grouped, at the top of the incident details page. ![Multiservice Group indicator](/images/kb/0b4d5335207231bba4bcd7650f6f0847cc842543b55232170847db88ee32ec9a-multiservice_group.webp) You can also view Global Alert Grouping on an incident details page in the following places: - The **Impacted Services** field shows the incident’s **source service** and the names of any other services whose alerts have grouped into the incident. ![Impacted services](/images/kb/0598a89e552e1f7444a1e25f33aed5e9836512a67506920e94e32c4388910b34-impacted_services.webp) - With the **Alerts** tab selected, you can also see the originating service for an alert. ![Alerts tab selected](/images/kb/1f20eb74e0216040fb899a3b794e2da3ea4b24c10e24fe416279f2b658551cef-alerts_tab.webp) - An incident's **Timeline** shows an entry when Global Alert Grouping adds an alert from another service. ![Incident Timeline](/images/kb/329660fe4889208f216dcbdf129837cd87029484439993f9139b0e54df38107c-incident_timeline.webp) ## Best Practices To get the most out of Global Alert Grouping, follow these practices: 1. Make sure that responders on all associated Teams and escalation policies know that their services are part of a Global Alert Grouping configuration. 2. Ensure that on-call responders evaluate all alerts, including alerts that originated on other services. 3. If an on-call responder is unsure whether an alert belongs to an incident on their assigned service, instruct the on-call responder to add a responder from the originating service to review the alert, or [move the alert](/incident-management/incidents/alerts#move-alerts-to-another-incident) to create an incident on the originating service. Creating a new incident on the originating service notifies the appropriate on-call responder. 4. Ensure you have a base role of Responder or higher for services within a multiservice group. Do not use [Advanced Permissions](/account-admin/advanced-permissions) to restrict access to services that are part of a multiservice group (for example, restricting access to view incidents on a specific service). ## FAQ **What service does an incident get assigned to when grouping across services?** Global Alert Grouping groups subsequent alerts into the incident on the service that received the initial alert. Global Alert Grouping continues grouping matched alerts based on the configured criteria and rolling time window, or until the incident resolves. **Which escalation policy will be assigned to the incident?** PagerDuty uses the escalation policy from the service where the first alert triggers. **How do I bring in other responders?** You have multiple options: - The on-call responder can [reassign an incident to other users or escalation policies](/incident-management/incidents/reassign-incidents). - The on-call responder for that incident can [add responders](/incident-management/incidents/add-responders). - The on-call responder can execute an [Incident Workflow](/ai-automation/automation/incident-workflows) that adds responders. **Where can I check if an alert from my service has been grouped into an incident on a different service?** Grouped alerts maintain their originating service, so the alerts for your team are visible in the [Alerts Table](/incident-management/incidents/alerts/alerts-table) when the **My Teams** filter is selected. They do not appear on the Incidents page when **My Teams** is selected. In the [Service Directory](/incident-management/services/service-directory), the multiservice incident is only visible with the source service (the service that received the first alert). This means that a single technical service shows as impacted on your status page. If you configure [Business Services](/incident-management/services/business-services) and a priority is assigned to the incident, then the business service also displays as impacted. We are currently evaluating an area on the service directory page to show multiservice incidents when a service has an alert assigned to a multiservice incident. **How do I move an alert that was grouped into an incident to another service?** Read [Move Alerts to Another Incident](/incident-management/incidents/edit-incidents#move-alerts-to-another-incident) for more information about merging alerts, moving alerts to a new service, and using a grouped alert to trigger a new incident. **What is the maximum number of services that can be in a multiservice group?** You can include up to 250 services in a multiservice group. **Can a service have more than one type of Alert Grouping enabled at a time?** We do not allow a service to have more than one type of alert grouping enabled at a time, or to be part of more than one multiservice group, due to the potential conflict between grouping types. If two alerts matched more than one grouping type, PagerDuty does not know which setting takes precedence. **What is the difference between “grouping” and “merging” an alert?** Grouping is an automated process using our alert grouping feature set for automatically grouping alerts into a single incident based on criteria set by a user. Merging is a manual process executed by a user where an [incident](/incident-management/incidents/edit-incidents#merge-incidents) or [alert](/incident-management/incidents/edit-incidents#move-alerts-to-another-incident) can merge into a new or existing incident. **How does Global Alert Grouping interact with Event Orchestration?** [Event Orchestration](/ai-automation/aiops/event-orchestration) is a powerful tool that can manipulate an event's payload before routing it to a service. As their names imply, Event Orchestration acts at the event level (upstream from Global Alert Grouping), while Global Alert Grouping acts on alerts (downstream from Event Orchestration). This means that Global Alert Grouping evaluates an alert as it is received from Event Orchestration, after any transformations in Global Orchestrations or Service Orchestrations have taken place. **Can I use the REST API to configure Global Alert Grouping?** Yes, the following endpoints are documented in our Developer Docs to help you configure Global Alert Grouping: - [List alert grouping settings](/developer/api/reference/rest/alert-grouping-settings/list-alert-grouping-settings) - [Create an Alert Grouping Setting](/developer/api/reference/rest/alert-grouping-settings/post-alert-grouping-settings) - [Get an Alert Grouping Setting](/developer/api/reference/rest/alert-grouping-settings/get-alert-grouping-setting) - [Delete an Alert Grouping Setting](/developer/api/reference/rest/alert-grouping-settings/delete-alert-grouping-setting) - [Update an Alert Grouping Setting](/developer/api/reference/rest/alert-grouping-settings/put-alert-grouping-setting) --- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping # Intelligent Alert Grouping Automatically add incoming alerts to related incidents via the Intelligent Alert Grouping algorithm Intelligent Alert Grouping automatically consolidates related alerts into a single, actionable incident, using machine learning to reduce alert noise for DevOps teams and SREs. Instead of managing dozens of separate notifications, incident responders can focus on problem-solving while the system combines related alerts in real time. The technology continuously learns from your team's response patterns and service behavior, becoming more accurate over time and leading to progressively faster incident resolution. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. > **Legacy Availability:** Intelligent Alert Grouping is also available with [Legacy Event Intelligence](/ai-automation/aiops/legacy-event-intelligence). > > Newer features are only available to PagerDuty AIOps customers and are not available on Legacy Event Intelligence plans. This includes: > > - [Advanced Options](#advanced-options), including [configurable field grouping](#configure-grouping-fields) and [resetting the learner cache](#reset-learner-cache) > - [Global Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping#intelligent) > > Contact the [Sales Team](https://www.pagerduty.com/contact-us/#contact-sales) to upgrade your account's pricing plan. > **Required User Permissions:** The following roles can edit a service's Alert Grouping settings: > > - Account Owner > - Admin and Global Admin > - User > - Manager base role and team roles > - Manager team roles can only manage services associated with their team. ## Enable Intelligent Alert Grouping 1. Navigate to **Services** → **Service Directory** and select your desired service. 2. Select the **Settings** tab and click **New Grouping** under **Reduce Noise**. 3. Select **Intelligent**. - _Optional_: To group alerts across multiple services, select additional services in the **Select Services to group the alerts** dropdown. See [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping#intelligent) for more information. 4. Select the desired grouping time window for alerts on the service. The **Recommended** time window in the dropdown uses historical service data to calculate the average time between alerts. 5. Click **Save**. ![Intelligent Alert Grouping on a service](/images/kb/1c7e3c8c562c968109769ddb583c02af12a03cfbdaa9f13ed56765459d305aa3-intelligent_alert_grouping.webp) *Intelligent Alert Grouping on a service* > **Scope:** Intelligent Alert Grouping only looks at alerts on a single service and does not group alerts from other services. It does, however, consider alerts sent to other integrations on the same service, if any exist. > > See [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping) if you are interested in grouping alerts across multiple services. > **How PagerDuty Uses Intelligent Alert Grouping:** PagerDuty's DataOps team uses Intelligent Alert Grouping to manage high incident volumes across multiple monitors. By implementing alert suppression and intelligent grouping, they achieved a 37% reduction in incidents and increased efficiency two to three times, allowing 10 FTEs to support a workload that would typically require 20–30 FTEs. This automation eliminated the productivity loss from manually grouping duplicate incidents and helped resolve issues faster. [Read the full story →](https://www.pagerduty.com/ops-guides/using-pd/dataops-team/) ## View Intelligent Alert Grouping on an Incident You can see Intelligent Alert Grouping actively grouping alerts on an incident's detail page under the **Alerts** tab. The **Grouping Now** label indicates that an incident is using alert grouping. You can also see how many alerts are grouped into the incident and their status. In the example below, two alerts have been grouped: one is triggered and the other is resolved. ![View Intelligent Alert Grouping](/images/kb/a20c58b49713e4910cd8db6463e5e0f93719ea38b6e5c00413b1b25641ba5c38-Intelligent_Alert_Grouping_on_an_incident.webp) *View Intelligent Alert Grouping* Select **Alert grouping details** to see which [Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping) method is in effect, when grouping started, and the conditions under which grouping stops. ![Alert grouping details](/images/kb/3cb71f2d602024b2c28a7712ecfa1b6bba1e9580a7e206ee72c63c30c3551d19-alert_grouping_details.webp) *Alert grouping details* ## Disable Intelligent Alert Grouping To select a different grouping method or disable Alert Grouping entirely: 1. Navigate to **Services** → **Service Directory** and select your desired service. 2. Select the **Settings** tab and click **Edit** next to **Reduce Noise**. 3. Click **Delete** in the bottom-left corner. 4. Click **Delete** in the confirmation modal. > **Non-Reversible Action:** This action cannot be undone. ## Advanced Options > **Advanced Options for AIOps Customers:** Advanced Options — including configuring grouping fields and resetting the learner cache — are only available to PagerDuty AIOps customers and are not available on Legacy Event Intelligence plans. Advanced Options allow you to customize which alert fields the grouping model analyzes when determining textual similarities, and to reset the grouping model's learner cache. - [Configure Grouping Fields](#configure-grouping-fields): Choose up to five fields, including standard [Common Event Format (PD-CEF)](/developer/api/pd-cef) fields and custom details, for a comprehensive alert grouping analysis. - [Reset Learner Cache](#reset-learner-cache): Reset the learner cache. ![A screenshot of the PagerDuty UI indicating where to configure Intelligent Alert Grouping's advanced options](/images/kb/848569074d32b46c9952369a46886e9c13a2c61b271c13c2deba4d50e2119068-advanced_options.webp) *Advanced Options* ### Configure Grouping Fields By default, Intelligent Alert Grouping uses alerts' **Summary** field to determine textual similarity. Depending on your event data, you may want to use alternate fields to determine similarity. 1. While [configuring Intelligent Alert Grouping](#enable-intelligent-alert-grouping), click the **Advanced Options** dropdown. 2. Under **Select Fields**, select a field from the dropdown for the Intelligent Alert Grouping model to consider for textual similarity. - If you select **Custom Details**, enter a **Custom field name**. 3. _Optional_: Click **Add Field** and select another field. You can repeat this step to configure up to five fields. 4. Click **Save**. > **Considerations:** - **Summary** is the only required field. If you do not select **Summary**, it is possible that all selected fields will be blank — in which case no alert grouping occurs because all selected fields are empty. > - When any selected field is blank, that field is not analyzed or considered for grouping. The model only considers fields with available data. > - Intelligent Alert Grouping analyzes selected fields for textual similarity and does not evaluate based on exact matches. To specify exact matching criteria, use the [Intelligent + Alert Content](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping) option. > - The maximum number of characters across all selected fields is 1,000. ### Reset Learner Cache This option resets the grouping model's learner cache. This can be useful if a service's data structure changes significantly or after a period of testing. 1. While [configuring Intelligent Alert Grouping](#enable-intelligent-alert-grouping), click the **Advanced Options** dropdown. 2. Enable the **Reset learner cache** checkbox. 3. Click **Save**. ## Algorithm Behavior The Intelligent Alert Grouping algorithm observes real-time alert data and incident history and adapts as new alerts trigger on a service. After you have [enabled Intelligent Alert Grouping](#enable-intelligent-alert-grouping) on a service, no explicit configuration is required, though you may optionally configure the [Flexible Time Window](#flexible-time-window). > **Single-Service Alert Grouping:** The following information applies when you have selected a single service during [configuration](#enable-intelligent-alert-grouping). The algorithm behaves slightly differently when you select more than one service. See [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping#algorithm-behavior) for more information. Intelligent Alert Grouping groups an alert into an existing incident when all of the following criteria are met: 1. The most recent alert was created within the specified grouping time window. This works on a rolling basis — the timestamp on the incoming alert is compared to the most recently grouped alert. 2. The incident is less than 24 hours old. 3. The Intelligent Alert Grouping algorithm determines that the alerts are similar. Alerts that do not meet these criteria trigger a new incident. The algorithm also reacts to feedback from you and your team. The best way for the algorithm to learn and adapt is to manually merge related incidents and to manually move alerts to a different incident when they are not related. See [Merge Incidents](/incident-management/incidents/edit-incidents#merge-incidents) for more information. Alert titles can also be updated automatically using [Event Orchestration](/ai-automation/aiops/event-orchestration#event-fields), which influences the algorithm. > **Merge Incidents API:** Merging and unmerging alerts through the API does not factor into the Intelligent Alert Grouping algorithm. Only manual merges and unmerges in the PagerDuty web app influence the algorithm. PagerDuty strongly recommends against sending test data to try to influence the algorithm, as this can result in unpredictable behavior. ### Flexible Time Window You can configure the grouping time window on each service. The **Recommended** time window is calculated from the average time between alerts using historical service data. The larger the grouping time window, the higher the chance of overgrouping — where an unrelated alert is grouped into an incident. After increasing the time window, monitor alert grouping on the service for a period of time and adjust as needed based on accuracy. > **Best Practice:** For critical services, use the standard five-minute grouping window unless you are not seeing a satisfactory reduction in noise or the service owner deems a larger window appropriate. If you increase the time window, do so gradually and monitor closely to confirm that only the desired alerts are grouped. ## FAQ **Can you enable the grouping time window via API?** Yes. The time window can be enabled using the [Update a service](/developer/api/reference/rest/services/update-service) API endpoint and specified in seconds up to 3,600 seconds. You can enable the recommended time window by setting the time window to zero: `"time_window": 0`. **Can you retrieve the grouping time window via API?** Yes. You can retrieve the grouping time window using the [Get a service](/developer/api/reference/rest/services/get-service) API endpoint via `alert_grouping_parameters.config.recommended_time_window`. **Does the recommended time window update dynamically once enabled?** Whenever you view or edit a service's recommended time window in the [web app](#enable-intelligent-alert-grouping) or via the [Get a service](/developer/api/reference/rest/services/get-service) API endpoint (`alert_grouping_parameters.config.recommended_time_window`), PagerDuty recalculates the recommended value to show the latest figure. However, the grouping time window remains static unless changed manually. **Can we expose the machine learning-based model via the API?** No, not at this time. **Can we plug our own machine learning code into PagerDuty?** No, not at this time. **Does this take into account rules or correlations configured outside of PagerDuty?** No. This model is entirely based on actions taken within PagerDuty. **Does it affect the machine learning capabilities if I rename the service?** No, it does not. **Can Intelligent Alert Grouping group alerts together from multiple services?** By default, Intelligent Alert Grouping only looks at alerts from a single service. To group alerts from different services, see [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping). **Why didn't my alerts get grouped together?** There are three main reasons the algorithm may not have grouped alerts on the same service: 1. The alerts did not arrive within the time window specified for that service. 2. The incoming alert data was not similar enough to the desired alerts, or was more similar to the alerts it was grouped with. 3. Human response behavior — such as merging or moving alerts out of incidents — overrode the desired behavior. The algorithm takes several factors into consideration, which makes tracing specific grouping decisions difficult. If you believe there has been enough history for an alert to be grouped but are still seeing unexpected grouping behavior, contact [the Support team](mailto:support@pagerduty.com) with links to specific incidents and alert groupings and a summary of why the behavior is unexpected. **Why don't I see any alert grouping options?** Your current pricing plan may not support Alert Grouping. If you are interested in trying Alert Grouping, [contact the Sales team](https://www.pagerduty.com/contact-us/#contact-sales) to start a free PagerDuty AIOps trial. **Is there a limit to how many alerts can group into a single incident?** Yes. Incidents are limited to 1,000 alerts each. After this limit is reached, a new incident is created and subsequent alerts are grouped into the new incident. **Are incidents resolved only when all alerts within that incident are resolved?** Yes. An incident resolves when all of its associated alerts are resolved. Similarly, if you resolve an incident, PagerDuty automatically resolves any associated triggered alerts. See [Resolve Alerts](/incident-management/incidents/alerts#resolve-alerts) for more information.
--- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/alert-grouping/preview-intelligent-alert-grouping # Preview Intelligent Alert Grouping Preview how the Intelligent Alert Grouping algorithm would automatically group existing alerts The Preview Intelligent Alert Grouping feature gives service owners an overview of how [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) would have grouped historic alerts into incidents. This information can help inform how Intelligent Alert Grouping will group future alerts, since automatically grouped alerts mean fewer overall incidents and interruptions for responders. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. ## View the Preview Intelligent Alert Grouping Feature Services with a high volume of incidents, and some variance in their incident titles, tend to have the most interesting and meaningful previews. You can find the Preview Intelligent Alert Grouping feature by selecting an appropriate service in the web app: 1. Navigate to **Services** → **Service Directory** and select the **name** of your desired service. 2. Select the **Settings** tab, scroll to the **Reduce Noise** section, and click **Edit**/**New Grouping**. 3. With **Intelligent** selected, click **Preview**. ![An image showing a "Preview" link for Intelligent Alert Grouping](/images/kb/f4fb125886c963fc7eefd84b0773cffea68bec9e383d4ec488dc3ac4026a35d7-preview_iag.webp) *Select Preview link* > **PagerDuty AIOps Trial:** If you do not see **Intelligent** as an option and you would like a free trial of Intelligent Alert Grouping, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). ### Preview Details The preview modal provides a rich view of how alerts would have been grouped into incidents over a given period of time. Previews are generated once a day and are based on alerts from the past 45 days. The preview indicates the number of incidents that would have triggered without alert grouping, and how many fewer incidents your team would have been notified for if Intelligent Alert Grouping had been enabled. The preview assumes a five-minute time window unless a time window with a different duration has been set for that service. You can see metrics at the top of the preview, which are all calculated based on: - **Alerts**: The total number of [Alerts](/incident-management/incidents/alerts) this service has seen within the past 45 days. - **Incidents**: The total number of incidents within the past 45 days this service would have seen without turning on any alert grouping. - **Number of Unique Incidents**: The number of incidents that would have been triggered within the past 45 days, if the service had had Intelligent Alert Grouping turned on. - **Number of Incidents Saved**: The number of incidents that would have been saved from a trigger within the past 45 days, if the service had had Intelligent Alert Grouping turned on. ![A screenshot of the PagerDuty UI detailing the Preview Intelligent Alert Grouping feature, including graphs and statistics](/images/kb/9abf1ae19500f19ad9c07ac91afd2198a468308557822a70217e5af1810d6870-preview-iag-modal.webp) *Preview Intelligent Alert Grouping* You can expand each alert group to see how many, and which, alerts would have been grouped together into an incident. The date and time listed reflect when the first incoming alert was triggered. Note that the incident's title is derived from the first incoming alert. Read more about this in the [Alerts](/incident-management/incidents/alerts#alerts-and-incident-titles) article. Some services may have a large number of alert groups in this list. PagerDuty recommends looking at some of the larger groups to get a sense of the grouping algorithm's behavior. To learn more about the grouping algorithm, see [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping#algorithm-behavior). ## FAQ **I just triggered an incident/alert, why is it not appearing in the preview?** Previews are not generated in real time. They are generated once a day. If you have new alert data that you would like the preview to take into account, check back in 24 hours, after the next preview has been generated. **When will the preview on my service be updated?** New previews are calculated once a day, provided there have been sufficient alerts in the last few months. If a preview is unavailable on your service, it could be because the Intelligent Alert Grouping algorithm does not have enough data to generate a new preview. Existing previews are only deleted when a new preview is available to replace it. **Some alerts appear under incidents that I wouldn't want to be grouped together. How can I adjust these groups?** While the preview is static and cannot be changed directly, you can still provide feedback on the quality of the groups you see and this feedback helps the algorithm learn and create better groups. To provide feedback on the groups, go to the original incident and assign the alert to another incident, or merge incidents together. Read [Editing Incidents](/incident-management/incidents/edit-incidents#merge-incidents) for more information about moving alerts from one incident to another. After moving alerts and/or merging incidents, your changes are not immediately reflected in the current preview, however you may notice a difference in the next preview. **Why do I see fewer alert groups than expected?** The preview's table displays alert groups that have two or more alerts. Furthermore, only the top 10 alert groups are displayed, sorted by alert count. --- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/alert-grouping/time-based-alert-grouping # Time-Based Alert Grouping Automatically group incoming alerts into open incidents based on the time they are generated Time-Based Alert Grouping automatically adds alerts to an open incident for a predetermined period. This feature is helpful for services that generate many alerts. Grouped alerts mean fewer incidents and interruptions for responders, richer context for triggered incidents, and lower resolution times. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. > **Legacy Availability:** This feature is also available with [Legacy Event Intelligence](/ai-automation/aiops/legacy-event-intelligence). > **Required User Permission:** You can edit a service's alert grouping settings if you have one of the following roles: > > - Account Owner > - Admin and Global Admin > - User > - Manager base role and team roles > - Manager team roles can only manage services associated with their team. ## Enable Time-Based Alert Grouping 1. In the web app, navigate to **Services** → **Service Directory** and click your preferred service's **name**. 2. Select the **Settings** tab and click **New Grouping** or **Edit** in the **Reduce Noise** section. 3. Select **Time only** and select a duration from the dropdown. ![The PagerDuty web app showing how to enable Time-Based Alert Grouping](/images/kb/891a0912af2df410d7be0a1525011e7b59442dde41ff4e22174aad65374e71ca-Time-Based_Alert_Grouping.webp) *Enable Time-Based Alert Grouping* 4. Click **Save**. ## Disable Time-Based Alert Grouping 1. In the web app, navigate to **Services** → **Service Directory** and click the **name** of your desired service. 2. Select the **Settings** tab and click **Edit** in the **Reduce Noise** section. 3. In the bottom-left, click **Delete**. In the confirmation modal, click **Delete** again. - **Note**: This action cannot be undone. ## Time-Based Alert Grouping Behavior When you enable Time-Based Alert Grouping on a service, the first alert creates a new incident. Subsequent alerts add to that incident for the specified time period while the incident remains open (that is, **triggered** or **acknowledged**). If the incident resolves within the selected time period, the timer stops, and subsequent alerts do not group into that incident. The timer restarts when the next alert on that service arrives and triggers a new incident. If the incident does not resolve within the selected time period, the incident remains open and the next alert triggers a new incident. Subsequent alerts group into the most recent incident. If you select **until incident is resolved** for the duration of the timer, the first alert on the service triggers an incident and all subsequent alerts group into that incident until it resolves, regardless of how much time passes. ## Time-Based Alert Grouping Example This example uses a **Shopping Cart** service with a one-hour time-based alert grouping window. | Time | Example 1: Incident resolves within 45 minutes | Example 2: Incident does not resolve within one hour | | :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 10:00 a.m. | TRIGGER: An alert triggers and creates Incident 1. The one-hour timer begins, set to group all new alerts on the **Shopping Cart** service into Incident 1 until 11:00 a.m. | TRIGGER: An alert triggers and creates Incident 1. The one-hour timer begins, set to group all new alerts on the **Shopping Cart** service into Incident 1 until 11:00 a.m. | | 10:07 a.m. | ACKNOWLEDGE: Responder acknowledges Incident 1. | ACKNOWLEDGE: Responder acknowledges Incident 1. | | 10:15 a.m. | Five more alerts come in on **Shopping Cart**. Incident 1 now has six alerts, all triggered. | Five more alerts come in on **Shopping Cart**. Incident 1 now has six alerts, all triggered. | | 10:45 a.m. | RESOLVE: The responder resolves Incident 1. New alerts on the **Shopping Cart** service no longer group into Incident 1. | Incident 1 remains in the acknowledged state and groups alerts. | | 10:55 a.m. | TRIGGER: An alert comes in on the **Shopping Cart** service and creates Incident 2. A new one-hour timer begins, set to group all new alerts on the **Shopping Cart** service into Incident 2 until 11:55 a.m. | An alert comes in on **Shopping Cart** and groups into Incident 1. Incident 1 now has seven alerts: three resolved, four triggered. | | 11:00 a.m. | Incident 1 is resolved, Incident 2 is triggered with one alert. | Incident 1 remains acknowledged, the timer expires, and PagerDuty no longer actively groups new alerts into Incident 1. Incident 1 is acknowledged with seven alerts. | | 11:10 a.m. | An alert comes in and groups into Incident 2. Incident 2 now has two alerts. | TRIGGER: An alert comes in and creates Incident 2. The one-hour timer begins, set to group all new alerts on the **Shopping Cart** service into Incident 2 until 12:10 a.m. | ## FAQ **Can I move grouped alerts to another incident?** If Time-Based Alert Grouping adds an alert to an incident that belongs better as part of a different incident, you can move the alert to another incident or create a new incident. For more information, read [Move Alerts to Another Incident](/incident-management/incidents/edit-incidents#move-alerts-to-another-incident). **How does Time-Based Alert Grouping affect incident notifications?** While Time-Based Alert Grouping reduces notification noise, the specific number of times you receive notifications is based on your [notification rules](/account-admin/user-profile/notification-rules). For example, if a service has an [acknowledgement timeout](/incident-management/services/configurable-service-settings#acknowledgement-timeout), responders receive notifications when the timeout expires. **How is Time-Based Alert Grouping different from alert deduplication?** [Deduplication](/incident-management/incidents/event-management#deduplicate-alerts) is configured on a per-integration basis and often requires specific event information, like an incident key or an alert key. When you have multiple integrations on a service, or your monitoring tool generates a variety of alerts, management can become increasingly difficult. Time-Based Alert Grouping allows you to group all incoming events on the service into the current incident for the specified time period, regardless of the monitoring tool (that is, the integration) that generates the original alert. **How is Time-Based Alert Grouping different from snoozing incidents?** [Snoozing](/incident-management/incidents/edit-incidents#snooze-an-incident) an incident keeps it from moving up the escalation chain and notifying you. Snoozing does not prevent new incidents from generating on a service. **Can I manually merge incidents?** Yes, Time-Based Alert Grouping does not affect your ability to manually [merge incidents](/incident-management/incidents/edit-incidents#merge-incidents) or [move alerts from one incident to another](/incident-management/incidents/edit-incidents#move-alerts-to-another-incident). All grouped alerts merge into a single incident. **Can manually triggered incidents be grouped with Alert Grouping?** Manually triggered incidents do not create alerts, do not participate in Alert Grouping, and cannot merge into other incidents. **Will incidents created by REST API be grouped by Time-Based Alert Grouping?** No, like manually created incidents, the [Incidents REST API](/developer/incident-creation-api) bypasses alerts and directly creates incidents. Therefore, Time-Based Alert Grouping does not affect them. This behavior also applies to any integrations that create incidents via REST API, for example, the [ServiceNow](/integrations/servicenow-integration-guide) integration. Events sent via the [Events API v2](/developer/events-api-v2-overview) work with Time-Based Alert Grouping. **Is there a limit to how many alerts can group into a single incident?** Yes, PagerDuty incidents are limited to 1,000 alerts. After reaching this limit, a new incident triggers and subsequent alerts continue to group into the most recent incident. --- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping # Unified Alert Grouping Combine Intelligent Alert Grouping's machine learning model with Content-Based Alert Grouping's precision Unified Alert Grouping combines [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) and [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) with a flexible time window for increased precision and correlation control. Unified Alert Grouping groups alerts when alert content matches and Intelligent Alert Grouping determines alerts are similar. Alerts group only when both conditions are satisfied. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. > **Required User Permissions:** Users with the following roles can edit a service's Alert Grouping settings: > > - Account Owner > - Admin and Global Admin > - User > - Manager base role and Team roles ## Enable Unified Alert Grouping 1. Navigate to **Services** → **Service Directory** and select the name of your desired service. 2. Select the **Settings** tab and click **New Grouping** in the section **Reduce Noise**. 3. Select **Intelligent + Alert Content**. 1. _Optional_: To group alerts across multiple services, select additional services in the dropdown **Select Services to group the alerts**. Read [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping#intelligent--alert-content) for more information. 4. Select whether you want alerts to be grouped if **All** or **Any** specified fields match. 1. If **All** is selected, alerts match when content is exactly the same. 2. If **Any** is selected, alerts match when at least one of the fields is present. 5. In the **Select Fields** dropdown, select which alert field you would like to match on before Intelligent Alert Grouping considers alerts' similarity. > **View Alert Payloads:** You can select fields from recent alerts by clicking **See Recent Alerts**. This displays a list of the service's recent alerts. You can click an alert to view the alert's payload and then click on the field you want to match on. 6. _Optional_: Click **Add Field** to add additional content-based matching criteria. 7. Select the desired grouping time window for alerts on the service. The **Recommended** time indicated in the dropdown uses historical service data to calculate the average time between alerts. 8. Click **Save Settings**. ## Disable Unified Alert Grouping To select a different grouping method, or to disable Alert Grouping altogether, in the web app: 1. Navigate to **Services** → **Service Directory** and select the name of your desired service. 2. Select the **Settings** tab and click **Edit** next to **Reduce Noise**. 3. In the bottom-left, click **Delete**. 4. In the confirmation modal, click **Yes, turn off**. ## Unified Alert Grouping Behavior Consider the following alerts: **Alert 1** `Summary: “High CPU load on AWS EC2 instance” custom_details.source:”Datadog”` **Alert 2** `Summary: “High CPU load on AWS EC1 instance” custom_details.source:”Splunk”` [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) by itself would likely detect these two as similar, and group them together. However, with the greater control that Unified Alert Grouping offers, you can specify that alerts should only group if `custom_details.source` matches. As another example, in the following configuration, Unified Alert Grouping specifies that the `host` must match before Intelligent Alert Grouping considers alerts for grouping. ![Alerts must match on `custom_details.host`](/images/kb/9cc28b1c4c6ffc6dbe52aa0e1ddbfbb2ca0e8bcb4ab526c29e5f7265509c6b44-unified-alert-grouping-host.webp) *Alerts must match on custom\_details.host* The incident in the following screenshot shows that the host name matched, and that the summary fields were similar enough for Intelligent Alert Grouping to group them together. ![Alert grouping result](/images/kb/57377036443f47f28526c3fed76d2e3fc15747f04483f344563dc552acdada31-grouped_alerts.webp) *Alert grouping result*
--- URL: https://docs.pagerduty.com/ai-automation/aiops/noise-reduction/auto-pause-incident-notifications # Auto-Pause Incident Notifications Automatically pause notifications for transient alerts, giving time for them to resolve before distracting responders. The Auto-Pause Incident Notifications feature detects alerts that typically auto-resolve within a short time period and temporarily pauses incident notifications. During the pause period, new alerts are viewable in the [Alerts Table](/incident-management/incidents/alerts/alerts-table) with a **Suspended** status. These suspended alerts allow you to trigger an incident from the alert during the pause period, or to resolve the alert, preventing the incident and its notifications from being created altogether. If a suspended alert does not auto-resolve within the configured time period, PagerDuty creates an incident and notifies responders. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. > **Legacy Availability:** Auto-Pause Incident Notifications is also available with [Legacy Event Intelligence](/ai-automation/aiops/legacy-event-intelligence). Note that newer features (e.g., [Recommended Pause Time](#recommended-pause-time)) are only available to PagerDuty AIOps customers, and are not available on Legacy Event Intelligence plans. ## Configure Auto-Pause Incident Notifications Auto-Pause Incident Notifications is configured at the service level, and it can be turned on and off while [creating](/incident-management/services/services-and-integrations#create-a-service) or [editing](/incident-management/services/services-and-integrations#edit-service-settings) services. 1. In the PagerDuty web app, navigate to **Services** → **Service Directory**, and select the **service** you want to configure. 2. Select the **Settings** tab and click **Edit** in the section Auto Pause. 3. Select **Auto-pause incident notifications** and the desired pause period from the dropdown: **2**, **3**, **5**, **10**, or **15 minutes**. 4. Click **Save Changes**. ![A screenshot of the PagerDuty web app showing auto-pause incident notifications settings](/images/kb/63b445b6460beaf8e32aa925c1d72b8a55ed3c9955e208ce124e9f0c70d44d3b-auto_pause.webp) *Auto-pause incident notifications* ### Recommended Pause Time Auto-Pause Incident Notifications can generate a recommended pause time that informs you of the optimal pause time based on historical data. While [configuring Auto-Pause Incident Notifications](#configure-auto-pause-incident-notifications), select the value marked **Recommended** to optimize transient alerts. ![A screenshot of the PagerDuty web app showing the recommended pause duration](/images/kb/aa85298b0b2357718ea17a830673aebdb3c2034b97106bf4b7fc6036b3741e87-apin_recommended.webp) *Recommended pause time*
## FAQ **What is PagerDuty's definition of a transient alert?** For Auto-Pause Incident Notifications, a transient alert is an alert that typically auto-resolves via integration within a short time period. Alerts that receive a resolve action made manually by a responder are not classified as transient. **How are alerts determined to be transient?** Data science techniques assess the frequency of similar alerts demonstrating transient behavior in the past. If an alert is frequently classified as transient, the Auto-Pause Incident Notifications algorithm suspends incident notifications for the pause period set for that given service. **What happens to suspended alerts that resolve within the Recommended Pause Time window?** Suspended alerts that auto-resolve within the configured time period appear in the [Alerts Table](/incident-management/incidents/alerts/alerts-table) with the status **Resolved (Suppressed)** and have no associated PagerDuty incident. **Do I need to create any new service rules to use Auto-Pause Incident Notifications?** No new service rules are necessary to use Auto-Pause Incident Notifications. It can be turned on at any point through service configuration, or enabled on an existing service. You can configure [Paused Incident Notifications](/ai-automation/aiops/event-orchestration#pause-incident-notifications), an Event Orchestration feature, at the service level to build specific rules that determine how and when to pause incident creation and notification. **Will Auto-Pause Incident Notifications be applied to an event that was previously paused by Event Orchestration?** No, an event paused by Event Orchestration is not again paused by Auto-Pause Incident Notifications for alerts. **How does Auto-Pause Incident Notifications work with other Alert Grouping features?** If alerts are suspended by the Auto-Pause Incident Notifications feature for the specified pause period, then after the pause period expires, the triggered alerts honor the existing alert grouping configuration for that given service including [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping), [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping), and [Time-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/time-based-alert-grouping). **How can I get basic statistics on how many alerts are triggered or resolved after being paused?** PagerDuty has two reporting APIs available for Auto-Pause Incident Notifications. See the developer documentation for more information: - [Get Paused Incident Reporting on Alerts](/developer/api/reference/rest/paused-incident-reports/get-paused-incident-report-alerts) - [Get Paused Incident Reporting counts](/developer/api/reference/rest/paused-incident-reports/get-paused-incident-report-counts) **How is this feature different from Paused Incident Notifications?** Auto-Pause Incident Notifications uses machine learning to assess alerts that typically resolve within a short amount of time, and automatically pauses them based on a user-specified pause period. This feature is configured at the service level. [Paused Incident Notifications](/ai-automation/aiops/event-orchestration#pause-incident-notifications) is an Event Orchestration feature that creates alerts based on user-defined conditions, and pauses incident creation for a predefined amount of time. This feature is configured within [Event Orchestration](/ai-automation/aiops/event-orchestration). --- URL: https://docs.pagerduty.com/ai-automation/aiops/operations-console # Operations Console Gain live insight into incidents The PagerDuty Operations Console offers live visibility into incidents, and you can create customized views to triage and take immediate action on issues. This feature provides central IT teams and technical stakeholders with at-a-glance context on their technical environment in order to more efficiently triage incidents, and minimize MTTA and MTTR. ![An image of the PagerDuty web app showing the Operations Console with many triggered incidents](/images/kb/734f476f383d139e0fbbafe3ac3d42db73fb87ed271f241e11c9522baa8d3b12-operations_console.webp) > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). ## View the Operations Console In the web app, navigate to **AI** → **Operations Console**. > **Japanese Language Support:** The Operations Console supports Japanese as a display and interface language. Depending on your permission level, you can update this at the account or profile level: > > - **For Account Admins (Global Default):** > Navigate to **Account Settings** and locate the **Default Voice and Interface Language** dropdown to set the default for the entire organization. > - **For Individual Users:** > Navigate to **My Profile**, click the pencil icon next to **Voice Language Setting**, and select Japanese from the dropdown menu. > **AIOps Service Incidents Only:** Only incidents on [AIOps services](/ai-automation/aiops/overview#aiops-service-configuration) will display in the Operations Console. If you would like to view incidents created on non-AIOps services, you must navigate to the **Incidents** page. Please see our [AIOps Service Configuration](/ai-automation/aiops/overview#aiops-service-configuration) article for more information on managing AIOps on services. > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. ## Configure the Operations Console The console offers users great flexibility to customize the live incidents table. This includes the ability to add or remove standard incident, alert, and custom-defined columns, as well as filter, sort, and apply other configurations. ### Column Selector You can customize which fields are visible in the incidents table by adding, removing or reordering the fields. Click to open the column selector panel and select/deselect your desired columns. Reorder columns by dragging and dropping them to their preferred location. You can also resize a column's width by clicking and dragging the edge to your desired size. Users can also sort by up to three columns simultaneously. ![A screenshot of the PagerDuty web app detailing the Operations Console's column selector](/images/kb/b10b041d229c93be1f3af0819ebb57e435994d32b6b27a8ccfdbba18ee5d2bea-column_selector.webp) *Column selector* You can also display [Custom Fields on Incidents](/incident-management/incidents/custom-fields-on-incidents) in the live incidents table by clicking **Custom Columns** at the bottom of the Column Selector and adding them to the table. You can add up to ten Custom Fields in the Operations Console's incident table. If you wish to display a new field but are unable to, please deselect an existing custom field first. You can sort on up to three columns in the incidents table. ![A screenshot of the PagerDuty web app detailing how to add Custom Fields as columns in the Operations Console](/images/kb/2f150a7cad1893b87978d1580b219bb129d4b0ca95dc98d306176aba0bdf4e32-custom_columns.webp) *Custom columns* > **Tip:** Since each users may have a different view based on their permissions and configurations, changes in one user’s account will not affect other users’ view. You can share your view with team members via the Share button. You can also export the all loaded incidents with your customized columns as a CSV file using the menu. ![A screenshot of the PagerDuty web app showing how to export visible rows as a CSV file](/images/kb/0584b1b03d3148d43ae2d11e23cbd1a16990022fed64d0d5cfe94be5761e0e42-export_as_csv.webp) *Export visible rows as CSV* ### Side Panel You can view incident details by clicking on an incident's **Title** or alert count in the **Alerts** column. The side panel provides contextual information pertaining to the incident, including snoozed time (if applicable), alert grouping details (if applicable), alerts fields, alert custom details and so on, so you can view all things at a glance in one place. You can also change the width by dragging the side panel horizontally to view more or fewer alert columns. PagerDuty will remember your settings for later visits. ![A screenshot of the PagerDuty web app showing the Operations Console's side panel](/images/kb/af6f4303cefc300cba2ed1325bd18c39e7d68c518aeffcb05854bbf4feb6d995-side_panel.webp) *Operations Console side panel* ### Filters and Search At the highest level, you can show: - **All** incidents - **My teams** to display just incidents belonging to your [Teams](/account-admin/teams). You can also quickly filter by incident status: - **Assigned to me** - **Open** - **Acknowledged** - **Triggered** > **AIOps Service Incidents Only:** Only incidents on [AIOps services](/ai-automation/aiops/overview#aiops-service-configuration) will display in the Operations Console. If you would like to view incidents created on non-AIOps services, you must navigate to the **Incidents** page. For more granular filters: 1. Click to open the filter panel. 2. Click **Add** and select from the following: 1. **Alert Services** 2. **Assignee** 3. **Auto Resolved** 4. **Duration** 5. **Date** 6. **Escalation Policy** 7. **External Reference** 8. **Incident Number** 9. **Latest Note** 10. **Main Service** 11. **Priority** 12. **Responder** 13. **Status** 14. **Teams** 15. **Title** 16. **Urgency** 17. **User** 18. [**Custom Fields on Incidents**](/incident-management/incidents/custom-fields-on-incidents) 19. [**Custom Details**](#custom-details) on Alerts (Available by request) 3. Depending on the field(s) you select, enter the appropriate criteria and click **Apply Filters**. ![An image detailing filtering capabilities in the Operations Console](/images/kb/b49be95cf40eedd8b7e899d7ac9a22fa03fc3c76de4fde9c3de316c50e20ab2e-filters_and_search.webp) *Filters and search* Additionally, users can perform keyword search to filter on incident **Title**, **Incident number** and **Latest note**. > **Tip:** You can perform keyword search with conditions such as **contains**, **starts with**, **equals**, **does not contain**, and combine `AND`/`OR` operators to filter across a number of fields such as Incident Title, Incident Number, Last Notes. You can define up to five keywords with `AND`/`OR` operators. > > For optimal performance, enter at least three characters for searches with the **contains** filter. > > ![A screenshot of the PagerDuty web app showing how to use keyword search in the filters](/images/kb/945d8e1bfe44f8f14c5a2fd1bc36a78e03daf494ce8a46ef15f1a09004f88acc-keyword_search.webp) > *Keyword search* ### Actions To take action on incidents within Operations Console, select the checkbox to the left of the incident(s) and click your desired action: - **Resolve** - **Acknowledge** - **Add Responder** - **Reassign** - **Run** - **Merge** - **Snooze** - **Update Priority** - **Add Note** ![A screenshot of the PagerDuty web app detailing the various actions users can take on incidents in the Operations Console](/images/kb/20121dca06fa42e0af1c932d5aeb45ac581a012eb69ae1be03875b6dfe60e416-incident_actions.webp) *Incident actions* #### Bulk Actions When you want to perform actions on multiple incidents at once, you can click the selection box at the top of the incident table. This will select the first 50 incidents on the current page, and list the bulk action options at the bottom of your screen. Select from the following actions: - **Acknowledge** - **Resolve** - **Add Responder** - **Reassign** - **Merge** - **Snooze** - **Update Priority** - **Add Note** ### Incident Feed Update Frequency To optimize performance or during incident storms, you can toggle between **Live** and **Paused** update modes. By default, the console is set to **Live** updates, which continuously adds new incidents, and corresponding updates, to the feed. ![A screenshot of the PagerDuty web app showing that the Operations Console is set to Live updates](/images/kb/21b37b7593cebf8daabaa9c17476d08a6b97b78aee19f79c697ad5e0cee3db79-live_updates.webp) You can optionally pause live updates by clicking the toggle. While **Paused**, new incidents will not be added to the Operations Console, but updates to existing incidents will still be displayed. Users can manually update the incident table by refreshing the page. ![A screenshot of the PagerDuty web app showing the Operations Console is set to Paused updates](/images/kb/79dde93b1dd25fc4cc34a89a19653bd911ce004da533771c512182c2590d12c9-paused_updates.webp) ### Custom Details > **Available By Request:** This feature is available by request only. Please reach out to your account team to request this feature. You can define and add specific custom details fields from your alert payload to the incidents table. 1. Click to open the column selector panel. 2. Scroll to the bottom of the list and click **Add Custom Detail**. 3. In the modal, enter a **Table Header** and the **Custom Details Path** (e.g., the name of the field as it appears in the alert payload, such as `source` or `application`). 1. _Optionally_ click **+ Add Column** to add multiple custom detail columns at once. 4. Click **Add Columns**. ![A screenshot of the PagerDuty web app showing custom columns in the Operations Console](/images/kb/24feb2be42db73cf1889833369a8c4d84543d6dcefd6e4cce6e5194f3b1671a4-custom_columns.webp) *Custom columns* ## Service Health Visualization Service Health Visualization aggregates active incidents by Service into an interactive graph in the Operations Console to quickly identify hotspots and emerging issues. ### Access Service Health Visualization 1. In the PagerDuty web app, click **AIOps** → **Operations Console**. 2. Click the **View by** dropdown. 3. Select **Service Health**. ![View by Service Health](/images/kb/920ae3476da97f959fb94bd139fdf8c9f8f1aae7cd97067c2b2bf3f18569a47c-a8e280302eb58fc0fb4b7f7f797d2e2cf247e9416199cdd60ec2bf92d2189701-view_by_service_health.webp) ### Use the Incidents-by-Service Graph - **Multi-select filters**: Combine filters to refine results during active incidents. - **Click to drill in**: Select a service and time to view incident count and links to incident details. If more than 20 incidents exist, a link to the full Open Incidents list is provided. - Only services with active incidents will be accessible in the graph. - Services are automatically sorted by the number of active incidents. #### Apply Filters 1. Click to open the filter panel. 2. Click **Add** and select from the following: - Created - Team - Service - Priority 3. Depending on the field(s) you select, enter the appropriate criteria and click **Apply Filters**. #### Triage Example 1. **Spot the spike**: Identify a sudden increase in incidents for a particular service on the graph. 2. **Focus on service(s)**: Apply a service filter to isolate that service and any related dependencies. 3. **Drill in**: Click the service to view links to active incidents. 4. **Coordinate**: Use your incident workflows to mobilize teams and update stakeholders. ### Troubleshooting the Service Health Visualization **The graph looks empty** - Verify the time window—short ranges may show fewer incidents in quiet periods. - Clear any Service filters. - Confirm that incidents are actively open in the selected window. **Incident count seems off** - The graph updates automatically, but there may be a brief delay between incident creation and display. Refresh the page to capture the latest data. - Confirm that your filters (time and service) match your expectations. ## FAQ **How can I troubleshoot connection issues if the Operations Console does not load?** We use server-sent events (SSEs) to provide real-time updates. Your security or IT team may use a proxy/software to block these requests. If you encounter issues loading the Operations Console, please verify with your IT department whether SSEs are handled by proxies or third party software (e.g., antivirus programs or plugins). If so, you can request that they evaluate and enable our main SSE endpoint: `/api/v1/opsconsole/incident_module/search`. You can analyze the HAR file for the affected session to check if the request to `/api/v1/opsconsole/incident_module/search` is present and successful. Missing, blocked, or canceled requests may indicate that something in your network is preventing the SSE connection. ![A screenshot of the PagerDuty UI indicating that incidents in the Operations Console are loading](/images/kb/bc0d5d5a58749dc6b38a2c5db70cfe0c220be289312fde26259f8f76ad84fa8e-loading_incidents.webp) *Loading incidents...* **Can I add event custom fields from the alert payload to the Operations Console?** Yes, you can define custom fields as filters to narrow down results or search for specific incidents. Please read [Custom Details](#custom-details) above for more information. **How many event custom fields can I display in the Operations Console?** You can add up to 10 custom details fields in the Operations Console's incident table. If there's a field you'd like to display but cannot, please deselect another custom field first. **What happens if I manually merge an incident on a non-AIOps service with an incident on an AIOps service?** The incident will merge as normal. All AIOps features on the incident shall be available. **What happens if I manually reassign an incident on an AIOps service to a non-AIOps service?** The incident will move as normal, however, the system will disable all AIOps features on the incident. **What counts are shown in the Service Health Visualization?** Active incidents associated with each service within the selected time window. **Can I export the data in the Service Health Visualization?** Not at this time. Use drill-through to work incidents directly from PagerDuty. **Does the Service Health Visualization include Business Services?** The visualization is centered on Technical Services. Please refer to the [Service Dependency graph](/incident-management/services/service-graph) to understand upstream/downstream impact. --- URL: https://docs.pagerduty.com/ai-automation/aiops/outlier-incident # Outlier Incident View the frequency of similar incidents to gain helpful context during incident triage The Outlier Incident feature provides incident responders with immediate context on how often similar incidents have occurred on a specific service, helping them quickly determine whether an issue is familiar or new. This is particularly valuable for IT operations teams and DevOps engineers who need to identify patterns and irregularities to make informed decisions during response efforts. By categorizing incidents as frequent, rare, or anomalous, the feature streamlines the analysis process, allowing teams to focus on resolution and ultimately improve service reliability. > **AIOps / Signal Intelligence Feature:** This feature is included with the [PagerDuty AIOps](/ai-automation/aiops/overview) add-on, or included as Signal Intelligence in PD Reliability Platform plans. To sign up for a trial of PagerDuty AIOps features, read [PagerDuty AIOps Trials](/ai-automation/aiops/overview#pagerduty-aiops-trials). > **AIOps Service Configuration:** Your service configuration must have AIOps enabled to use this feature. See [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) for more information and enablement steps. > **Legacy Availability:** This feature is also available with [Legacy Event Intelligence](/ai-automation/aiops/legacy-event-intelligence). ## View Outlier Incident in the Web App 1. From the Incidents page or a service’s detail page, click your desired incident’s **Title** to see its detail page. 2. If an incident has been categorized as a frequent, rare or anomalous incident these details will appear below the incident title. ![A screenshot of the PagerDuty web app UI indicating an incident with the "Anomaly" Outlier Incident label](/images/kb/0547e82c047bf468baaef272ef9e1527171d1841c70ce189193220d0ea989457-outlier-incident-overview.webp) *Incident with "Anomaly" Outlier Incident label* ## Outlier Incident Labels Outlier Incident uses data science techniques to dynamically map incidents to templates and determine how often each type of incident occurs on a service. The following labels are applied below the incident title on the incident's details page: - **Frequent**: Incident types representing 20% or more of all incidents in the previous 30 days. - **Rare**: Incident types representing 5% or less of all incidents in the previous 30 days. - **Anomaly**: Incident types that have not occurred on the service in the previous 30 days. For the purpose of determining which of the labels above to use, incident data from the 30 days prior to an incident’s trigger date is used. --- URL: https://docs.pagerduty.com/ai-automation/aiops/overview # AIOps / Signal Intelligence Overview Minimize noise, accelerate resolution and automate event processing PagerDuty AIOps helps teams to reduce alert noise, improve incident visibility and triage more efficiently—eliminating manual, repetitive tasks from the incident response process. With quick implementation and no ongoing maintenance, teams can experience fewer incidents, resolve issues faster, and boost productivity in days, not months. > **AIOps and Signal Intelligence:** AIOps and Signal Intelligence are the same capability, offered under different plans: > - **AIOps** is a standalone add-on for Incident Management and legacy plans. > - **Signal Intelligence** is included in PD Reliability Platform plans. > > On PD Reliability Platform plans, Signal Intelligence is disabled by default on newly created services and Event Orchestrations. > **Purchase PagerDuty AIOps:** - PagerDuty AIOps launched in April 2023 and it's the [current evolution](/ai-automation/aiops/legacy-event-intelligence) of PagerDuty's Legacy Event Intelligence add-on. > - If you would like to migrate from Event Intelligence to PagerDuty AIOps, or purchase the add-on for the first time, please read [Purchase PagerDuty AIOps](#purchase-pagerduty-aiops). ## Feature Sets ​PagerDuty AIOps can be broken down into the following feature sets: - [Noise Reduction](#noise-reduction) - [Triage and RCA](#triage-and-rca) - [Event Orchestration and Automation](#event-orchestration-and-automation) - [Operations Console](#operations-console) - [Increased Event Ingestion](#increased-event-ingestion) ### Noise Reduction Reduce incident noise with the click of a button. Use built-in machine learning (ML) models that learn and adapt based on user behavior, or create your own logic. You can even group alerts across services using [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping). ![Service configuration panel with alert grouping and noise reduction toggles and options](/images/kb/c1de0921506f1315c30b6d87e88497efeb201f9cb043cab973860d23f5ee12f7-reduce_noise.webp) *Noise Reduction Settings on a PagerDuty Service* **Read more about our Noise Reduction features**: - [Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping) - [Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping) - [Preview Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/preview-intelligent-alert-grouping) - [Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping) - [Unified Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping) - [Time-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/time-based-alert-grouping) - [Auto-Pause Incident Notifications](/ai-automation/aiops/noise-reduction/auto-pause-incident-notifications) - [Event Orchestration: Alert Suppression](/ai-automation/aiops/event-orchestration#incident-data) ### Triage and RCA Responders can leverage machine learning to immediately surface critical incident information. When an incident occurs, you can quickly discover the probable origin of the incident, if the incident has previously occurred, and if a change was the likely cause. ![Incident detail panel highlighting the probable origin and related-change information](/images/kb/cac54ac888026d3d6d3904edc73ce6faad99b7e7aeb844c19f2375010c9824ad-triage-and-rca-features.webp) *Probable Origin Feature on a PagerDuty Incident* **Read more about our Triage and RCA features**: - [Past Incidents](/ai-automation/aiops/past-incidents) - [Related Incidents](/ai-automation/aiops/related-incidents) - [Outlier Incident](/ai-automation/aiops/outlier-incident) - [Probable Origin](/ai-automation/aiops/probable-origin) - [Recent Changes](/ai-automation/aiops/recent-changes) ### Event Orchestration and Automation Event Orchestration provides state-of-the-art automation capabilities that are a force-multiplier across the entire technical ecosystem. Teams can ​​enrich events and create complex logic within a service, or across services. This end-to-end event-driven automation ensures faster resolution and requires less input from humans who are needed for value-add work. ![Event orchestration rule builder with conditions and actions configured across services](/images/kb/d2b481e531d4ea9789611390f6a0c4afd3cacb9fa040f535267e48513ba6885d-automation-and-orchestration-features.webp) *Global Orchestration Configuration Screen* **Read more about Event Orchestration**: - [Event Orchestration](/ai-automation/aiops/event-orchestration) ### Operations Console The PagerDuty Operations Console offers live visibility into incidents, and you can create customized views to triage and take immediate action on issues. This feature provides central IT teams and technical stakeholders with at-a-glance context on their technical environment in order to more efficiently triage incidents, and minimize MTTA and MTTR. ![An image of the PagerDuty web app showing the Operations Console with many triggered incidents](/images/kb/5779bf695ab3c27dc43de986f136079ad52a8aba8c38b1d15b07c9486cddf1b1-operations_console.webp) *Operations Console* **Read more about the Operations Console**: - [Operations Console](/ai-automation/aiops/operations-console) ### Increased Event Ingestion Upon request, increase the Events API rate limit from 120 events/min per key, up to 10,000 events/min per key. Please contact your account team or Support to request a higher limit. ## PagerDuty AIOps Pricing PagerDuty AIOps is priced by event consumption, so you only pay for the events you ingest. PagerDuty is committed to providing customers with the best value and experience. With that in mind, PagerDuty's pricing is: - **Transparent**: Each event that PagerDuty accepts and processes is counted. This includes events sent while a service is in a [Maintenance Window](/incident-management/services/maintenance-windows). Historic and current data is viewable on your subscription page (**User Icon** → **Subscriptions**). - **Flexible**: The draw-down model with wide tiers simplifies estimation and minimizes the impact of event spikes. - **Informative**: Historical event data is visible on the PagerDuty subscription page so that you can better predict the future based on the past. - **Proactive**: Early warning notifications that alert you on your event usage can help you make the right decision. > **Event Notification Thresholds:** When an account reaches 50, 80, 90, 100, or 150% of purchased AIOps Events, a notification email will be sent to the Account Owner, as well as any recipients of [Additional Notification Emails](/account-admin/billing#additional-notification-emails) in Account Settings. Check out our [pricing page](https://www.pagerduty.com/pricing/aiops/) for more details or [contact Sales](https://www.pagerduty.com/contact-us/) to learn more. ## AIOps Service Configuration AIOps Service Configuration (Signal Intelligence on PD Reliability Platform) provides you with flexibility and control over how AIOps features apply. This approach allows you to enable AIOps on the [services](/incident-management/services/services-and-integrations) and [Event Orchestrations](/ai-automation/aiops/event-orchestration) that are most relevant to your needs. AIOps Service Configuration maximizes value and efficiency, and ensures that you're using advanced capabilities where they have the greatest impact. Benefits include: - **Cost-Effective Adoption**: Pay for AIOps on the services where teams will actively use it. This is especially valuable for larger organizations where not every team is ready to implement advanced AIOps features. - **Maximum Flexibility**: Roll out AIOps at your own pace and avoid unexpected event overages. - **Better Control, Better Experience**: Empower teams that want AIOps to use it, while others can stick with standard event management. Optimize both your incident response and your budget. ### How it Works - When you purchase AIOps, all services and Event Orchestrations have AIOps enabled by default. - You can disable or re-enable AIOps for [individual services](/incident-management/services/configurable-service-settings#manage-aiops) or [orchestrations](/ai-automation/aiops/event-orchestration#manage-aiops). - Only events sent to AIOps-enabled services or Event Orchestrations count toward your AIOps event volume tier. There is no change to how accepted events are counted, only which accepted events count against your AIOps event volume tier. ### Manage AIOps > **Required User Permissions:** - Account Owners > - Admins and Global Admins > - Manager base role and team roles > - Manager team roles can only manage services associated with their team > **Disable Behavior:** Please note that when you disable AIOps on a service or event orchestration, you can expect the following to occur: > > - **Event Throughput**: Any increased event throughput for AIOps reverts to the standard 120 events/minute. > - **Operations Console**: Only AIOps services and their incidents are accessible on the Operations Console. > - **Noise Reduction and Root Cause Feature Access**: The system disables advanced AIOps features (like Outlier Incident, Probable Origin, Related Incidents, Past Incidents, Auto Pause, Alert Grouping, and Recent Changes) for non-AIOps Services. > - **Advanced Orchestration Capabilities**: Only AIOps-enabled Event Orchestrations can use Global Orchestrations and Dynamic Service Routing. If a non-AIOps Orchestration has AIOps rules, the system will skip these rules during event ingestion. > - **Advanced Service Orchestration Rules**: Only AIOps-enabled Services can use advanced orchestration rules. If a non-AIOps Service has advanced rules, the system will skip these rules during event ingestion. #### Services Please see our [Configurable Service Settings](/incident-management/services/configurable-service-settings#manage-aiops) article for instructions to enable or disable AIOps on a service. #### Event Orchestration Please see our [Event Orchestration](/ai-automation/aiops/event-orchestration#manage-aiops) article for instructions to enable or disable AIOps on an Event Orchestration. ## PagerDuty AIOps Trials If you'd like to take PagerDuty AIOps for a spin before activating a trial, you can do so with our [interactive product tour](https://pagerduty.navattic.com/265z0hdg). You can activate a trial of PagerDuty AIOps via the following methods depending on your PagerDuty account status: - [Current Customers](#current-customers) - [Prospective Customers](#prospective-customers) ### Current Customers For current customers, the Account Owner can activate a trial on the account settings page: 1. In the PagerDuty web app, navigate to **User Icon** → **Account Settings**. 2. In the section **Product Trials**, select **Activate PagerDuty AIOps Trial**. 3. Your trial will automatically activate. ### Prospective Customers If you are not yet a PagerDuty customer, you can fill out [this form](https://www.pagerduty.com/try-pagerduty-aiops) and a representative will reach out about initiating a trial of PagerDuty AIOps. ### PagerDuty AIOps Trials FAQ **What happens at the end of the trial?** At the end of your trial, the Account Owner has the option to purchase PagerDuty AIOps. If you decide not to continue with a paid version of AIOps, at the end of 30 days the account will revert to its original state, removing AIOps features. This will delete most configured AIOps settings (and PagerDuty will not retain them). All services will revert to not having alert grouping configured, and if you were to sign up again the account would have to start from a clean slate. Consult the table below for the specific features PagerDuty retains: | Feature Category | Features | Retained / Not Retained by PagerDuty | | :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | | Ingestion | Recent Changes
Custom Change Event Transformer
High Ingestion Volumes | Not Retained | | Advanced Event Orchestration | Dynamic Field Enrichment & Extraction
Threshold Conditions
Recurring Conditions
Schedule Conditions
Rule Nesting
Paused incident notifications
Webhooks
Global Event Orchestration
Event Orchestration Variables
Dynamic Routing
Dynamic Escalation Policies | Retained | | Noise Reduction | Alert Suppression
Auto-Pause Incident Notifications
Time-Based Alert Grouping
Intelligent Alert Grouping (w/ Flexible Time Window)
Content-based Alert Grouping
Unified Alert grouping (IAG & CBAG)
Global Alert grouping | Not Retained | | Triage /
Root Cause Analysis | Change Correlation
Past Incidents
Related Incidents
Outlier Incidents
Probable Origin
Triage Widget (PD for Datadog) | Not Retained | | Dashboarding | Visibility Console
Operations Console | Not Retained | **How can I purchase PagerDuty AIOps?** Once your trial ends, there are several ways to purchase PagerDuty AIOps: 1. **Reseller Partner**: If you previously purchased PagerDuty via a reseller, please contact either the reseller or PagerDuty directly to proceed with your AIOps purchase. PagerDuty works with a wide network of reseller partners, and we are happy to assist in completing your transaction. 2. **Self-Serve (Tier 5 or Below)**: If you need the Tier 5 event allotment or lower, you can easily add AIOps to your subscription. Simply navigate to **User Icon** → **Account Settings** → **Subscriptions**, and manually include PagerDuty AIOps in your plan. 3. **Contact Sales (Above Tier 5)**: For event allotments beyond Tier 5, or if you prefer to speak with a sales representative, please contact your PagerDuty account representative or email [sales@pagerduty.com](mailto:sales@pagerduty.com). We'll gladly assist in customizing your PagerDuty AIOps subscription to fit your needs. ## Determine Your Event Volume PagerDuty AIOps is licensed per accepted event. Accepted events are any valid events that are sent to and processed by PagerDuty. We do not charge for events that were found to be invalid, rated-limited, or that resulted in a non-successful response to the client. There are two ways to determine your event volume based on your current status as a PagerDuty customer: - [Customers](#customers-1) - [Prospective Customers](#prospective-customers-1) ### Customers > **Required User Permissions:** Account Owners can view event volume. If you are a current PagerDuty customer, you can view your event volume by navigating to **User Icon** → **Subscriptions** or you can use our [Event Analytics](/incident-management/analytics/event-analytics) page at **Analytics** → **Event Analytics**. If you have a newer account without enough data, you can also follow the prospective customer process below. ### Prospective Customers 1. Determine how many events per month are generating from the noisiest integration you intend to send to PagerDuty. 2. Determine what percentage of your monthly events that integration sends. Some monitoring/observability tools indicate the number of events they are generating. 3. Calculate: Baseline events per month = (events/month for noisiest integration)/(% of total events from noisiest integration). ## Purchase PagerDuty AIOps If you're looking to enhance your incident response process and achieve fewer incidents with faster resolution, you should consider purchasing PagerDuty AIOps. > **Required User Permissions:** Account Owners can purchase PagerDuty AIOps. ### Legacy Event Intelligence Customers For legacy Event Intelligence customers, please [contact our Sales team](https://www.pagerduty.com/contact-us/) about migrating to PagerDuty AIOps. ### New Customers If you do not currently have PagerDuty's Legacy Event Intelligence product and you are interested in purchasing PagerDuty AIOps, please follow the instructions below. 1. First, you must [determine your event volume](#determine-your-event-volume). Take note of this information, as you will use it to select your event volume tier in step 4. 2. Next, navigate to **User Icon** → **Subscriptions** and click **Upgrade Plan**. 3. Select any **plan** (if you wish to stay on your current plan, select **Current Plan**). 4. On the next screen, select your preferred **Billing Cycle** and then check the **PagerDuty AIOps** checkbox. 5. Using the event volume information you found in step 1, select your **event volume tier** from the dropdown. 6. Complete checkout. If you'd like to talk to someone about your current plan, or how you can benefit from PagerDuty AIOps, please [contact our Sales team](https://www.pagerduty.com/contact-us/). ### Edit Your Event Volume Tier If you've already purchased PagerDuty AIOps and you'd like to edit your [event volume](#determine-your-event-volume) tier, please follow the instructions below. 1. Navigate to **User Icon** → **Subscriptions** and click **Upgrade Plan**. 2. Select any **plan** (if you wish to stay on your current plan, select **Current Plan**). 3. In the **PagerDuty AIOps** box, select your **event volume tier** from the dropdown. 4. Complete checkout. --- URL: https://docs.pagerduty.com/ai-automation/aiops/pagerduty-aiops-quickstart-guide # PagerDuty AIOps Quickstart Guide Set up PagerDuty AIOps in 90 minutes For many teams, adopting [PagerDuty AIOps](/ai-automation/aiops/overview) is key to seeing fewer incidents and faster resolution. By leveraging Machine Learning (ML) and automation, our customers can see faster resolution, fewer incidents, and are able to adopt automation faster than non-AIOps customers. This guide provides instructions to configure PagerDuty AIOps in 90 minutes, and in that short amount of time you can see less noise and reduce toil across your services. > **Create Better Services:** A [service](/incident-management/services/services-and-integrations#create-a-service) is defined as a discrete piece of functionality owned by a single team. Creating better services helps our ML improve accuracy of triage context and Intelligent Alert Grouping. Refer to our [Service Standards](/incident-management/services/service-directory#service-standards) guide to learn more about how to correctly create services in PagerDuty. ## Operations Console (5 Minutes) Many organizations look for a centralized overview during incident response. The [Operations Console](/ai-automation/aiops/operations-console) is the best place to understand your operations' current state. It offers live visibility into incidents, and users can create customized views to triage and take immediate action on issues. The Operations Console offers: - [Filters and Searches](/ai-automation/aiops/operations-console#filters-and-search): Need to focus on a specific group of incidents? Leverage a configurable table and filter components (such as [Services](/incident-management/services/services-and-integrations) , [Priority](/incident-management/incidents/incident-priority) , [Escalation Policy](/incident-management/schedules/escalation-policies) ) to create your refined view. - [Customized and Shared Views](/ai-automation/aiops/operations-console#column-selector): Want to see additional columns? Add, remove, and resize columns in the Operations Console to suit your needs. You can also share your view with your team members so everyone is working from a single source of truth in one centralized location. - [Incident Actions](/ai-automation/aiops/operations-console#actions): Need to run an incident workflow or add bulk notes? Take a variety of actions directly within the Operations Console to minimize your MTTA and MTTR. You can take a guided five minute [product tour](https://pagerduty.navattic.com/operations-console). We recommend adjusting the filters and columns to build your desired views. ## Automation and Orchestration (60 Minutes) PagerDuty AIOps uses [Event Orchestration](/ai-automation/aiops/event-orchestration), an automation engine that allows you to create rules that normalize and enrich your data. There are four components to Event Orchestration that you can configure: - **[Integrations](/ai-automation/aiops/event-orchestration#global-integrations)**: Use Global Integration keys in your monitoring tools to send data to an Event Orchestration. - **[Global Orchestrations](/ai-automation/aiops/event-orchestration#global-and-service-orchestration-rules)**: Allow multiple services to enrich data according to global sets of rules. ITOps or SRE teams usually create and manage Global Orchestrations. - **[Service Routes](/ai-automation/aiops/event-orchestration#manage-routing-rules)**: Ensure that when certain conditions are met, incidents are routed to the right team. - **[Service Event Orchestrations](/ai-automation/aiops/event-orchestration#service-orchestrations)**: Create service-level orchestrations to enrich data according to the service owner’s criteria. Service-owning teams can self-serve and manage their own Service Event Orchestrations. You will use these components to build the recommended Event Orchestration types below. > **Incoming Data:** By putting PagerDuty AIOps at the front of your event stream, PagerDuty acts as a centralized overview across monitoring tools and is a force multiplier for automation. To get the most value and best results for noise reduction and automation, all your events should flow through PagerDuty AIOps. To learn about how we integrate with your tools, see our [integrations page](/integrations). For teams just getting started, here are five common use cases for Event Orchestration that we recommend creating within your account: - **[Service Routing](/ai-automation/aiops/event-orchestration#manage-routing-rules)**: With [Global Integration keys](/ai-automation/aiops/event-orchestration#global-integrations), you can use a single key to ingest all events for all services relevant to your team. After events are ingested, you can configure [Service Routing Rules](/ai-automation/aiops/event-orchestration#manage-routing-rules) to define how events are distributed to downstream teams. (5-60 minutes, depending on organization size) - **[Rules-based Noise Reduction](/ai-automation/aiops/event-orchestration#configure-a-global-or-service-orchestration-rule)**: Event Orchestration has powerful noise reduction actions based on different conditions or scenarios. These tools include [suppression, notification pausing, and incident dropping](/ai-automation/aiops/event-orchestration#incident-data). Create broad conditions that describe classes of events that don't provide value to your teams. Then select the **Suppress** action to stop those events from generating notifications. (15 minutes) - **[Standardized Incident Response Procedures](/ai-automation/aiops/event-orchestration#configure-a-global-or-service-orchestration-rule)**: For well-understood incidents, add notes to incidents when they’re created. These [notes](/ai-automation/aiops/event-orchestration#incident-data) should define the standard response procedures for the incident. This is especially helpful to have in place for junior responders who need more context. (5-60 minutes depending on your existing documentation) - **[Major Incident Management](/ai-automation/aiops/event-orchestration/cache-variables)**: With Event Cache Orchestration variables, you can quickly identify when a major incident is occurring based on historical event data and adjust how rules are applied in those situations. This can help facilitate incident response during a major incident and ensure the right responders are being pulled in. (15 minutes) - **[Automated Incident Triage](/ai-automation/aiops/event-orchestration#configure-a-global-or-service-orchestration-rule)**: Event Orchestration can automatically assign priorities and severities to events when they are ingested, ensuring related incidents are treated correctly. To do this, define all the conditions that describe a high, medium, or low priority incident in your environment and specify the appropriate priority. (15 minutes) Once you’ve created these Orchestrations, you will only receive incidents relevant to your team and you’ll be able to resolve them faster with less toil and better data. Most of our customers see a reduction in MTTR and are able to create automation faster. ## Noise Reduction (20 Minutes) [Noise reduction](/ai-automation/aiops/overview#noise-reduction) is a top priority for all teams. It’s a significant quality-of-life improvement for incident responders, whether they’re a NOC operator or a DevOps engineer. ![Alert grouping and auto-pause noise reduction toggles and duration settings on a service's configuration page](/images/kb/6829eeb45de30e8b53e21a8d045c7974d5af1adcba0d3d43adff2108fd06c3bf-noise_reduction.webp) *Noise Reduction settings on a service* There are six ways you can set your noise level threshold. We recommend that new users configure their noise reduction settings as such: - **[Intelligent Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/intelligent-alert-grouping)**: Leverages ML to group related alerts based on previous incident data and human interaction. This option uses a rolling grouping window with a duration between five minutes to an hour. We recommend starting with five minutes. If Intelligent Alert Grouping groups an alert incorrectly while it learns, you can regroup the alert. This will train the model to group alerts like this in the future. - **[Auto-Pause Incident Notifications](/ai-automation/aiops/noise-reduction/auto-pause-incident-notifications)**: Leverages ML to identify alerts that typically auto-resolve on their own and pauses incident creation. Select a duration ranging from 2-15 minutes. If the alert does not auto-resolve within the configured time period, PagerDuty will create an incident. Intelligent Alert Grouping is the best way to see immediate noise reduction in the environment. For teams with specific alert grouping requirements, we also recommend the following: - **[Content-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/content-based-alert-grouping)**: Create custom alert grouping based on known fields between alerts. Alerts that share an exact match on a set of chosen fields will be grouped together into the most recent open incident. You can even leverage Event Orchestration to add custom details that then are grouped by content. - **[Unified Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/unified-alert-grouping)**: Combines Content-Based Alert Grouping and Intelligent Alert Grouping with a flexible time window for increased precision and correlation control. - **[Global Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/global-alert-grouping)**: Allows you to reduce noise by using Content-Based Alert Grouping to group alerts across multiple technical services. - **[Time-Based Alert Grouping](/ai-automation/aiops/noise-reduction/alert-grouping/time-based-alert-grouping)**: Allows you to group alerts based on a static time increment of your choice, ranging from 2 minutes to 24 hours, or even until the incident is resolved. This option is helpful for services that generate many alerts. We recommend starting with 2-5 minutes. > **PagerDuty AIOps ML Model:** PagerDuty AIOps’ unique ML model is always analyzing data signals, so when you turn it on, there is minimal-to-zero training necessary. For existing customers who are new to AIOps, the model will start working immediately, as the platform is continuously learning from responder actions. For new users, the model will begin learning as soon as you begin using PagerDuty. The model will become more accurate as you send more events to PagerDuty, and resolve more incidents. ## Triage and Root Cause Analysis (1 Minute) PagerDuty AIOps comes with several ML [triage features](/ai-automation/aiops/overview#triage-and-rca) to provide you with more context during incident response. This also removes the toil of digging through documentation and postmortems to find the key information you’re looking for. **Triage and Root Cause Analysis (RCA) features require zero configuration**. When you turn on AIOps, the ML algorithms begin processing data. Similar to other ML-based features, the more data you add to PagerDuty, the more effective these tools will be for you and the faster the model will learn. Our ML-based triage and RCA features include: - **[Outlier Incident](/ai-automation/aiops/outlier-incident)**: Tells you if an incident is frequent, rare, or an anomaly. Helps responders understand how novel an incident is. The more novel, the more they might want to have help. - **[Past Incidents](/ai-automation/aiops/past-incidents)**: Shares if an incident like this has occurred in the past, as well as the incident frequency over the last six months. If so, you can click into the past incident and view incident metadata – like who was involved or what remediation efforts were used. - **[Related Incidents](/ai-automation/aiops/related-incidents)**: Shows other active incidents within the system that may be related. This helps you understand dependencies and cascading impact of an incident, and it allows you to provide feedback to improve recommendations over time. - **[Probable Origin](/ai-automation/aiops/probable-origin)**: Determines the most likely service origin of the incident. This scopes the incident and tells you which team to coordinate with for more insights. - **[Change Correlation](/ai-automation/aiops/recent-changes#change-correlation)**: Uses machine learning to correlate which incidents happen with certain changes. The incident shows recent changes on that service or related services. As most incidents are change-related, this gives you a jump start on triage. **Video: PagerDuty AIOps Triage and RCA** Here's a clip from the movie Apollo 13, where Gene Kranz (Flight Director / Incident Commander) shows some great examples of Incident Command. Here are some things to note: * Walks into the room, and immediately obvious that he's the IC. Calms the noise, and makes sure everyone is paying attention. * Provides a status update so people are aware of the situation. * Projector breaks, doesn't get sidetracked on fixing it, just moves on to something else. * Provides a proposal for how to proceed and elicits feedback. * Listens to the feedback calmly. * When counter-proposal is raised, states that he agrees and why. * Allows a discussion to happen, listens to all points. When discussion gets out of hand, re-asserts command of the situation. * Explains his decision, and why. * Explains his full plan and decision, so everyone is on the same page. --- Another clip from Apollo 13. Things to note: * Summarizes the situation, and states the facts. * Listens to the feedback from various people. * When a trusted SME provides information counter to what everyone else is saying, asks for additional clarification ("What do you mean, everything?") * Wise cracking remarks are not acknowledged by the IC ("You can't run a vacuum cleaner on 12 amps!") * "That's the deal?".. "That's the deal". * Once decision is made, moves on to the next discussion. * Delegates tasks. --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/incident-response-course # Incident Response This is an open-source version of PagerDuty's Incident Response training course. What started as an internal course to train new Incident Commanders at > **Incident Response Training Course (2018):** This is an open-source version of "Incident Response Training", our PagerDuty training course for incident response and incident command. It started as an internal course to train new Incident Commanders and has since developed into one that we now deliver publicly. This is a snapshot of what the training looked like in 2018. The latest version is now part of our [PagerDuty University](https://university.pagerduty.com/) courses. > > It includes lots of introductory information on our process, and details on the Incident Commander role specifically. All the information is already available as part of our [public documentation](/ops-guides/incident-response-guide), this is just a different way of presenting it that's hopefully more engaging. Feel free to use this as a base for training in your own organization. > > The text presented here is a semi-accurate transcription of how the training was usually delivered. --- ## Introduction ![001](/images/guides/incident-response-guide/incident_response.001.webp) *001. "Incident Response Training".* Hi, I'm Rich, and welcome to "Incident Response Training". This is a shorter version of our internal training at PagerDuty, which we use to train up our new Incident Commanders. It's been slightly adapted for a wider audience, but the majority is exactly what we run ourselves. We're not going to be able to cover everything, otherwise we'd be here for a few days, but I'll cover some of the most important parts of our process. I'll try to keep this as short as I can. Actually, how long do we have? Can someone keep track of time for me? That would be great, thanks! --- ## Learn How to Effectively Manage Incidents ![002](/images/guides/incident-response-guide/incident_response.002.webp) *002. Learn how to effectively manage incidents.* The goal of this session is to give you an understanding of how to effectively manage incidents within your organization. I'll describe the process we use at PagerDuty for managing critical incidents, and talk in more detail about a specific role called the "Incident Commander". This isn't a sales pitch. I'm not on our sales team, and this isn't a talk about how to use PagerDuty to manage your incidents (although obviously it would be awesome if you did). The intent today is to introduce you to how we manage incidents internally at PagerDuty, and provide you with lots of practical information you can take away to your own organizations to either start or improve your own incident response processes. --- ## Replace Chaos with Calm ![003](/images/guides/incident-response-guide/incident_response.003.webp) *003. Replace chaos with calm.* Let's start with a quick question. How does incident response usually go in your organization today? Is it a smooth and streamlined process, or is it a lot of people talking over one another? For most of you it's probably going to be somewhere in the middle. We want less of the latter, and more of the former. We want to replace chaos with calm. Panic and chaos are not good during an incident, they only exacerbate things and causes more confusion. We want things to be calm and organized. --- ## What is Incident Response? ![004](/images/guides/incident-response-guide/incident_response.004.webp) *004. What is incident response? [Docs Reference](/ops-guides/incident-response-guide/what-is-an-incident#what-is-incident-response)* So when we talk about incident response, what we're really talking about is an organized approach to addressing and managing an incident. This is how we define incident response at PagerDuty. They key here is on the word _organized_. We don't want to be running around in a panic anytime an alert goes off. We want our response to be almost routine, and for everyone to work together like a well-oiled machine. There's a quote I really like from an excellent book called [Incident Management for Operations](https://learning.oreilly.com/library/view/~/9781491917619/) that's appropriate here, > Fire is not an emergency to the fire department . . . [Y]ou expect a rapid response from a group of professionals, skilled in the art of solving whatever issues you are having. --- ## Goal of Incident Response ![005](/images/guides/incident-response-guide/incident_response.005.webp) *005. Goal of incident response. [Docs Reference](/ops-guides/incident-response-guide/what-is-an-incident#what-is-incident-response)* It may surprise you to learn the goal of incident response isn’t just about solving the problem. Give a thousand monkeys a keyboard and enough time and they can probably solve your problem. That's not good incident response. We want to solve the problem in a way which limits the damage caused, and reduces the recovery time and costs. I don’t just mean _financial_ cost either, there’s a cost associated with engineer health too. Constantly waking people up at 3am can have a dramatic negative effect on their health and happiness. If financial impact is all you care about though, let's not forget that **people are expensive**. In a large organization, a phone bridge with 100 people sitting there mostly idle for several hours is not unheard of. If each of those people cost ~$100/hour, that’s $10K every hour! That’s _really_ expensive to the business. --- ## What is an Incident? ![006](/images/guides/incident-response-guide/incident_response.006.webp) *006. What is an incident? [Docs Reference](/ops-guides/incident-response-guide/what-is-an-incident#what-is-an-incident)* Before we can respond to an incident though, we need to [define what an incident actually is](/ops-guides/incident-response-guide/what-is-an-incident). It sounds silly, but if you’re not sure whether something’s an incident, you don’t know whether to respond to it. Here is PagerDuty’s definition of an incident, > An unplanned disruption or degradation of service that is actively affecting customers' ability to use the product. "Customers" here doesn't just refer to external customers, but can refer to internal customers too. Your definition might be different, and that’s OK. I just wanted to give you an idea of the kind of definition that can get you started. You want your definition to be simple, no more than a sentence, and easily understood by anyone. You may notice that this is quite a broad definition though. A typo technically fits this description. As does a full outage. Obviously these are very different scenarios. So we do have something else too. --- ## What is a Major Incident? ![007](/images/guides/incident-response-guide/incident_response.007.webp) *007. What is a major incident? [Docs Reference](/ops-guides/incident-response-guide/what-is-an-incident#what-is-a-major-incident)* We also have something we call a **major incident**. This is any incident where we require a coordinated response between teams. Again, this is just our definition at PagerDuty, feel free to use your own. The intention behind this definition is that sometimes incidents can be handled by a single team, maybe the owners of a service that's having trouble. That rarely requires a large response in and of itself. But as soon as they need to involve another team, whether it's customer support, or database administrators, then we declare it to be a major incident and kick off a much larger response. The _coordination_ is key here, and we’ll talk more about this later. But this still covers quite a range of potential incidents. We can get more granular. --- ## Severity Levels ![008](/images/guides/incident-response-guide/incident_response.008.webp) *008. Severity levels. [Docs Reference](/ops-guides/incident-response-guide/severity-levels)* We also use [severity levels](/ops-guides/incident-response-guide/severity-levels) to determine how severe an incident is, and what type of response it gets. We use `SEV-5` through `SEV-1` for our levels, but you may use a different scheme, `P0` through `P5`, or maybe even emoji, 🔥 through 💩, etc. Let's imagine you're looking at a graph of traffic to your website. You can typically determine severity based on how drastically your metrics are affected. So as your website traffic drops, the severity increases. You will usually reach a point where you've set some predefined target or watermark, where as soon as the metric passes, you automatically consider something a major incident. At PagerDuty it's the difference between a `SEV-3` and `SEV-2`, but it may be different for your organization. Then as things get even more dire, we get into our `SEV-2`'s and our `SEV-1`'s when things completely flatline. Having pre-defined thresholds and metrics can allow you to have automatic triggers for your response process. > **We recommend using metrics tied to business impact.:** Metrics can be very useful, and often work best when they're tied to _business impact_. For example, a metric we monitor at PagerDuty is "number of outbound notifications per second", at Amazon it could be "number of orders per second", at Netflix it might be "stream starts per second", etc. Monitoring these important business metrics will then let you use automation to determine the severity of an incident and the type of response you use. > > If you use metrics that aren't tied to business impact (e.g. "CPU usage is high on a host"), then it's difficult, and sometimes impossible, to determine the severity of an incident associated with that metric. > > You want to use a metric that lets you know how your business is doing, not how a particular piece of equipment is doing. --- ## Anyone Can Trigger Incident Response ![009](/images/guides/incident-response-guide/incident_response.009.webp) *009. Anyone can trigger incident response at any time.* But sometimes you won't know the impact straight away. Or maybe your metric hasn't reached the predefined threshold yet. We still need a way for a human to jump in and call something a major incident. So even though we have automation at PagerDuty, we also have a mechanism whereby anyone can trigger our major incident response process at any time. This is very important for us. We've found that **lowering the barrier to triggering incident response has lead to a dramatic increase in the speed with which incidents are resolved**. We don't want people to sit on something because the official alarm hasn't gone off yet. If customer support gets lots of requests very quickly, it's a good sign there's something wrong, and we need them to be able to raise the alarm. We've even had interns trigger our incident response process in their first week. If the janitor walks past a graph and thinks it looks wrong, I want them to be able to trigger incident response. We were initially hesitant to introduce this, as we feared it would lead to lots of false positives. People triggering the alarm in an abundance of caution and it not really being an incident. But we've seen quite the opposite, people are pretty good at policing this themselves. Only twice have we had it be a false alarm, and both times it was warranted based on the information available at the time. Even if you do get a false positive now and then, you can use it as free practice. --- ## Triggering Incidents via Chat ![010](/images/guides/incident-response-guide/incident_response.010.webp) *010. Triggering incidents via chat. [Docs Reference](/ops-guides/incident-response-guide/chatops#ic-page)* So how do we let humans trigger the process? We do it with a [chat command](/ops-guides/incident-response-guide/chatops), but don’t feel like that’s the only right way. I just wanted to demonstrate how we do it to give you an idea. You can do it however your want. Air horn, flashing light in the office, hire a mariachi band, etc. The point is you want a way to trigger your response that's fast, easy, and available to everyone. --- ## Peacetime vs Wartime ![011](/images/guides/incident-response-guide/incident_response.011.webp) *011. Peacetime vs Wartime. [Docs Reference](/ops-guides/incident-response-guide/what-is-an-incident#mentality-shift)* Once an incident is triggered, we need to switch our mode of thinking. We need a [mentality shift](/ops-guides/incident-response-guide/what-is-an-incident#mentality-shift). We want a distinction between “normal operations” and “there’s an incident in progress”. We need to switch decision making from peacetime to wartime. From day-to-day operations, to defending the business. Something that would be considered completely unacceptable during normal operations, such as deploying code without running any tests, might be perfectly acceptable during a major incident when you need to restore service quickly. The way you operate, your role hierarchy, and the level of risk you’re willing to take will all change as we make this shift. --- ## Normal vs Emergency ![012](/images/guides/incident-response-guide/incident_response.012.webp) *012. Normal vs Emergency. [Docs Reference](/ops-guides/incident-response-guide/what-is-an-incident#mentality-shift)* Some people don’t like the peacetime/wartime analogy, so you can call it what you want. Normal/Emergency. --- ## OK vs Not OK ![013](/images/guides/incident-response-guide/incident_response.013.webp) *013. OK vs Not OK. [Docs Reference](/ops-guides/incident-response-guide/what-is-an-incident#mentality-shift)* Or OK/NOT OK. What you call it isn't as important as being able to make the mental shift. --- ## Incident Command System ![014](/images/guides/incident-response-guide/incident_response.014.webp) *014. Incident Command System (ICS). [Docs Reference](/ops-guides/incident-response-guide/training-overview#national-incident-management-system-nims)* So let’s talk about our process a bit more. The way we do incident response at PagerDuty isn’t something we invented ourselves, it is heavily based on the [Incident Command System](https://en.wikipedia.org/wiki/Incident_Command_System), usually abbreviated to ICS. ICS was developed after some [devastating wildfires in Southern California](https://en.wikipedia.org/wiki/Laguna_Fire) in 1970. Thousands of firefighters responded, but found it difficult to work together. They knew how to fight fires individually, but lacked a common framework to work effectively as a larger group. After the fires, an interagency group called [FIRESCOPE](https://en.wikipedia.org/wiki/FIRESCOPE) (Which believe it or not is an acronym for "FIrefighting REsources of Southern California Organized for Potential Emergencies") was formed and set out to develop two systems for managing wildland fire. One of those systems became known as ICS, and eventually became a national model for command structures at any major incident. In 2004, the [National Incident Management System (NIMS)](https://en.wikipedia.org/wiki/National_Incident_Management_System) was established by FEMA, and is now used as the standard for emergency management by all public agencies in the United States. NIMS defines several operational systems as part of it, of which ICS is one. It’s used by everyone from the local fire department responding to a house fire, to the US government responding to a natural disaster. It provides a standardized response framework that everyone is familiar with. NIMS and ICS are the basis of the process we use at PagerDuty, however we have heavily modified it for our needs. Turns out that things can be streamlined a bit when human life isn't on the line. --- ## Incident Response Around The World ![015](/images/guides/incident-response-guide/incident_response.015.webp) *015. Incident response around the world. [Docs Reference](/ops-guides/incident-response-guide/training-overview#incident-response-around-the-world)* It's worth noting that even though our process is based on the US systems, NIMS and ICS, there are many similar systems in use all over the world. While many are also based on ICS, some were developed separately, yet offer many of the same features. I particularly like [the UK system](https://en.wikipedia.org/wiki/Gold%E2%80%93silver%E2%80%93bronze_command_structure), simply because it has a role called the "Gold Commander", which just sounds like a Bond villain. When developing our process at PagerDuty, we looked at a few of the other systems in use around the world, and chose the bits we liked the most to add to our own. > **Emergency Management Around the World:** If you're interested in learning more about the systems in use by other countries, we have [links to some official resources](/ops-guides/incident-response-guide/reading#official-resources). > > There's also a book available from the US FEMA website, called "Comparative Emergency Management: Understanding Disaster Policies, Organizations, and Initiatives from Around the World" where it compares the systems used by about 30 different countries. --- ## Roles ![016](/images/guides/incident-response-guide/incident_response.016.webp) *016. Roles of incident response.* So let's talk about the [roles involved in our process](/ops-guides/incident-response-guide/different-roles). I'm going to introduce the roles one by one, but I don't want you to get scared by the number that will be on the slide by the end. We didn't start with this many roles, and we don't have people filling all the roles in every incident. This is just showing the available roles, and defining what they are. The process and roles will grow and shrink to fit the size of the incident at hand. While we don’t use exactly the same roles as ICS, we picked out the ones that matter for us in order to get our role structure. * First up is the **Incident Commander**, usually abbreviated to IC. They're the person in charge and the most important role in the process. They make all the decisions, and all information flows up to them. What they say goes. I'm going to be talking more about this role in a moment, so we'll continue on with the others for now. * Next up we have the **Deputy**. This is basically a backup Incident Commander. They're training as an IC and will be listening to all the same information. They help to make sure nothing gets missed by the IC, and acts as a hot-swap standby should the IC want to handover command. This is one of those roles you won't need if you're just starting out. For a long time our Deputy and Scribe would be the same person. * Then we have the **Scribe**. The scribe's job is to keep an accurate timeline of events. What has happened, when it happened, and the key decisions that have been made. We use Slack for this, and the Scribe will be writing down notes into a Slack room, which gets us nicely timestamped data. It's worth noting that they're **not doing a direct dictation** of a voice call. It's not "John said this, Mary said this". It's more like "We're deciding between A and B, we've decided on A". Together, these roles are called the Command Staff. * Next we have the **Customer Liaison**. This is a member of our support team, and their job is to handle the two-way interaction with our customers. So they'll update customers as to what is going on, whether that's via email, post, or updating our status page. But they'll also let us know what customers are saying too. If we're getting 100's of support requests, or no one has raised a ticket at all. Since this can be useful information in tracking down a cause, and determining the level of risk we can take during our recovery. * The **Internal Liaison** is a relatively new role in our process. Their job is to handle all the interaction with internal teams, such as our executives, or our marketing teams, and so on. We have a separate Slack channel for incident updates, to which the Internal Liaison will post regular status updates, and answer any questions from the rest of the organization. This keeps those questions out of our main response, but allows people to still get answers. The internal liaison will also page other teams as necessary if they're needed on the response. Again, this isn't a role you'll need for most companies, for a while this was also handled by our Deputy/Scribe role. Together, these are the liaisons. * Finally, we have the **Subject Matter Experts**, or SME's. These are the people who will actually be fixing the problem. They'll be the ones logging into servers, changing code, and running commands. Today, I’m going to focus on one role in particular, that of the Incident Commander. --- ## Incident Commander ![017](/images/guides/incident-response-guide/incident_response.017.webp) *017. Incident commander. [Docs Reference](/ops-guides/incident-response-guide/incident-commander)* The incident commander is one of the most important roles you can have. Even if you don’t have deputy, scribe, customer liaison, etc. The Incident Commander is one you should get first (well, after the SME’s of course, you probably need someone to solve your problem before you need someone to coordinate the response). --- ## Single Source of Truth ![018](/images/guides/incident-response-guide/incident_response.018.webp) *018. Single source of truth.* They’re the single source of truth during an incident, and are the ones in charge. The big cheese. They make all decisions, and no action should be performed unless the IC has said so. --- ## Highest Ranking Person ![019](/images/guides/incident-response-guide/incident_response.019.webp) *019. Highest ranking person.* No matter their day-to-day role, and IC is always becomes the highest ranking person on the response. They're running the show. Remember what we talked about earlier with the mentality shift? Well, this is one of the things that will change during an incident. > **Is the Incident Commander a dictator?:** Only in the sense that they are in charge and their decisions cannot be overruled. They do not rule by force, or go on power trips and order people around for the sake of it. A good Incident Commander will **listen** to their experts and make the best decision they can based on the information available. Incident Commanders should show empathy towards all responders. --- ## Higher than the CEO ![020](/images/guides/incident-response-guide/incident_response.020.webp) *020. Higher than the CEO.* Even if the CEO joins the response, the IC still outranks them in an incident response situation. **This is absolutely critical for successful incident response, but it does require buy-in from your executives.** Please don't surprise your CEO with this, it will not go well for you. Whether this works for you will depend on your organization. This is how we do it at PagerDuty and it works well for us, but I can imagine it not being easy to get this sort of buy-in in other organizations. I used to work in the airline industry, and I don't think this rule would fly there (Get it? Airline industry. Fly. Hello? This thing on?). --- ## Not a Resolver ![021](/images/guides/incident-response-guide/incident_response.021.webp) *021. Not a resolver.* Importantly, the IC doesn't resolve the incident, they coordinate and delegate all tasks. They're the conductor of the orchestra, they're not playing an instrument. They're not acting as a resolver, and shouldn't be looking at graphs, or logging into servers. This can be especially hard sometimes if the IC is an engineer in their day-to-day role, as they may naturally want to jump in to try and help, but that urge must be resisted if they're acting as an IC. If they absolutely are the only person who can solve the problem, then they should handover to another Incident Commander and assume the role of a Subject Matter Expert instead. We'll talk a bit more about this scenario later. --- ## BSOD ![022](/images/guides/incident-response-guide/incident_response.022.webp) *022. Uh oh!* Oh dear, that’s not good. Did something go wrong? Seems we have ourselves an incident! So what do you do when things break in the middle of the night? What's the first step to responding to an incident? It turns out that the first step in any incident response is always the same, whether you're a small startup or a large enterprise. Whether there's 25 cents on the line, or 25 billion dollars. --- ## Don't Panic ![023](/images/guides/incident-response-guide/incident_response.023.webp) *023. Don't panic.* **Don’t panic.** It elevates stress, and causes others to panic. It’ll end up hurting your incident response a lot more. _It's OK to panic on the inside._ We're only human after all. It's a natural reaction to panic in these sorts of situations a little bit. Everything about getting paged is designed to get adrenaline flowing. Loud pager sounds and so on. Just try not to outwardly show panic, because it will cause others to do the same. Act calm, and others will follow suit. Those with experience will stay calm, and that can make the difference between a chaotic incident, and one that resolves smoothly. So don’t panic! --- ## IC Introduction ![024](/images/guides/incident-response-guide/incident_response.024.webp) *024. "Hi, I'm Rich, I'm the Incident Commander". [Docs Reference](/ops-guides/incident-response-guide/incident-commander#start-of-call-announcement)* But today we're lucky to have an IC here. > Hi, I'm Rich, I'm the Incident Commander. Every call should start like this. Well, use your own name and not mine, but you get the idea. There are a few important things here with the way I phrased this. > **What if you join a call and there's no IC?:** It doesn't always work out that the first person to join the call is the incident commander. So what do you do in that case? Some guides will recommend the first person who joins acts as the Incident Commander, regardless of training. ICS usually works this way, where the first person on-site acts as the IC until someone more qualified arrives. We tried that and found it just doesn't work in practice. For example, let's say that the first person to join your response call becomes the acting IC. After an incident occurs, how long do you think it will be before one of your responders joins the call? > > Yeah, turns out it's about 10 minutes. Because people are afraid of being the IC. You can't force someone to be an IC, and we prefer to make sure the acting IC at least has the training. It may add a few minutes to the start of an incident, but it makes it go smoother and quicker overall. If a trained IC joins the call and there's isn't an existing IC, they will take on the role. They ask "Is there an IC on the call?.... hearing nothing, this is X, I'm the Incident Commander". > > It's also worth noting that the on-call IC doesn't automatically take over when they join. Whoever is the active IC on the call is in charge until they perform a handover. --- ## Introduce Yourself ![025](/images/guides/incident-response-guide/incident_response.025.webp) *025. Introduce yourself.* Firstly, I introduced myself by name. I didn't just say "Hi, I'm the IC". I'm not an emotionless robot. Introductions are important so that people know who you are. They’ll usually be referring to you as "IC", rather than by name, but it still humanizes you more. If you introduce yourself by name people will treat you differently and it'll help to make things go a little bit smoother. You’ll find soon that a lot of the job of an IC involves psychology and phrasing more than technical expertise. --- ## Say Incident Commander ![026](/images/guides/incident-response-guide/incident_response.026.webp) *026. Say "Incident Commander".* Then I said that I'm the "Incident Commander". I didn't abbreviate to IC, since new people might not understand the lingo yet. Stating it that way made it very clear. We want to make sure we **always use clear language**. Additionally, saying the word "Commander" here will subconsciously instill in people that you're in charge. --- ## Good Communication ![027](/images/guides/incident-response-guide/incident_response.027.webp) *027. Good communication is essential.* Good communication is essential. A breakdown in communication can hamper the entire response process. One of your jobs as an IC is to keep the lines of communication clear and maintain discipline. Don’t throw weird or unfamiliar acronyms into the discussion. --- ## Acronym Overload ![028](/images/guides/incident-response-guide/incident_response.028.webp) *028. Acronym overload.* Too many acronyms and internal lingo will upset newcomers and adds cognitive overhead. As shown in this completely realistic example. It takes much longer to say "Let's get the Incident Commander on the response call, then get a bacon, lettuce, and tomato sandwich for all the Subject Matter Experts". But it's much clearer what is being asked for. --- ## Clear is Better Than Concise ![029](/images/guides/incident-response-guide/incident_response.029.webp) *029. Clear is better than concise. [Docs Reference](/ops-guides/incident-response-guide/call-etiquette#lingo)* Clear instructions are more important than concise instructions. You want to **favor explicit and clear communication over all else**. If you have the choice between taking 5 seconds and abbreviating, or taking 30 seconds and making it clear, take 30 seconds. Don’t give a long essay, but make sure the instructions are unambiguous. There's a tendency to want to rush through an incident, that every second counts, and that you need to use abbreviations to get the fastest possible response. Unfortunately you'll find that using unfamiliar and unclear language will almost always prolong an incident. --- ## What's Wrong? ![030](/images/guides/incident-response-guide/incident_response.030.webp) *030. What's wrong? [Docs Reference](/ops-guides/incident-response-guide/incident-commander#size-up)* OK, so how do we actually start solving our problem? The first step is to collect information from your Subject Matter Experts (SME) for their services/area of ownership. Ask what's wrong, and gather the symptoms of the incident. Is it only affecting one system? Is it affecting everything? Was there a specific metric that triggered an alarm? We call this “[sizing up](/ops-guides/incident-response-guide/incident-commander#size-up)”. We're trying to get an idea of the scope of the incident. --- ## What Actions Can We Take? ![031](/images/guides/incident-response-guide/incident_response.031.webp) *031. What actions can we take? [Docs Reference](/ops-guides/incident-response-guide/incident-commander#stabilize)* Next we want to ask our experts what they want to do to fix their systems. Remember, the IC isn't coming up with solutions, we want to ask the people who are the experts for their services what they want to do to. They will have a much better idea of the actions that can be taken. We want to collect proposed repair actions. --- ## What Risks Are Involved? ![032](/images/guides/incident-response-guide/incident_response.032.webp) *032. What are the risks involved?* Importantly, we also want to make sure we ask what risks are involved with the proposed actions. "What impact will that have?", "What are the risks involved?", "How confident are you it will work?". Without this information, we can't make an informed decision. For example, if we need to restart our servers to fix a problem, we could either reboot them all at once and be done in 30 seconds, or we could do a rolling restart and take 10 minutes. On the surface of it, the first option sounds like the best. But, if we ask for the risks involved, we'll learn that the first option will cause downtime for everyone in those 30s, whereas the second option, while slower, will result in no downtime for end users. This can change the decision you make, so it's important to get the information. --- ## Make a Decision ![033](/images/guides/incident-response-guide/incident_response.033.webp) *033. Make a decision.* Once we have a collection of actions and their associated risks, it's time to make a decision. Sometimes there's an obvious path forward, with one option being clearly better. But sometimes you're presented with two equally bad options. There’s no golden rule here I can give you, it’ll be up to context and your company culture. But my advice if you can't decide between two options is to literally flip a coin. **Making the wrong decision is better than making no decision.** Making no decision doesn't help to make forward progress, you learn nothing new and the incident is still going on. Making a decision, even if it's the "wrong" one will give you more information. If it turns out to be wrong, you can then put all your resources into the other option. A wrong decision gives you more useful information, making no decision gives you nothing. You want to avoid [decision paralysis](https://xkcd.com/1801/) at all costs, as it can prolong your incident further. > **'Do nothing' is an acceptable decision.:** I should note that the above advice is intended for the situation when you can't decide between two options. "Do nothing" is a perfectly acceptable decision if that's the course of action you want to take. It is sometimes appropriate to get more information by waiting and seeing what changes. --- ## Gain Consensus ![034](/images/guides/incident-response-guide/incident_response.034.webp) *034. Gain consensus.* Once we've made a decision, we need to gain consensus for our plan. But wait, why? Didn't I say earlier that the IC is basically a dictator and everyone should follow their instructions? While technically true, we want to be sure we give a chance to listen to any potential problems our experts may have with the plan. We don't want people to come back later and say things like "I knew that wouldn't work". We want to make sure we stop the [hindsight 20/20 problem](https://en.wikipedia.org/wiki/Hindsight_bias). It demotivates responders, and wastes time. But gaining consensus amongst a large group of people can be a bit difficult. --- ## Blue Background ![035](/images/guides/incident-response-guide/incident_response.035.webp) *035. This background is blue.* Let's look at a quick example to show what I mean, > I propose that this background is blue. Does everyone agree? > **Audience participation!:** This is where I would usually get few people from the audience nodding or quietly saying "Yes". I'll point to about 5 or 6 people who did nothing and ask them one by one if they agree. Until it gets uncomfortable. See how long it’s taking us to reach consensus? **Distributed consensus is hard**, you’ll be there forever trying to agree on the proposed actions. Let's try it a different way, > I propose that this background is blue. Are there any strong objections? ... Hearing none, the background is blue, let's proceed. --- ## Any Strong Objections? ![036](/images/guides/incident-response-guide/incident_response.036.webp) *036. Are there any strong objections? [Docs Reference](/ops-guides/incident-response-guide/incident-commander#gaining-consensus-polling-during-a-decision)* See how much faster that was? I **implicitly got the consensus of everyone in the room**, so none of you could come back later and say you didn't think the background was blue, because I gave you all a chance to object. Doing it this way optimizes for the 99% case. Most of the time there won’t be any objections and you can just continue. But likewise, we don't really care if people agree with us. We care if people _disagree_, that's the information we need the most. If you ask everyone to agree, you may get one person saying "No" with a really important point, but you can't hear them because everyone else is saying "Yes". --- ## Strong ![037](/images/guides/incident-response-guide/incident_response.037.webp) *037. STRONG objections.* This is one of the most useful phrases in your toolkit as an IC as it allows you to get consensus on a decision very quickly, and prevents the hindsight problem from popping up later. The way we phrased it though is important, the word "**strong**" subconsciously instills in people that we're still in an incident situation, and normal concerns might not apply. Make sure to leave enough of a pause for people to raise any objections they may have. It's no good asking for strong objections then moving on. All responders need to have the opportunity to raise a concern. So now that we have consensus, we need to execute the plan, that means assigning the task to someone. Before we do that though, I have a quick question. --- ## How Long Have I Been Talking? ![038](/images/guides/incident-response-guide/incident_response.038.webp) *038. How long have I been talking?* At the start, I asked if someone could keep track of the time for me. Did anyone actually do that? Can anyone tell me exactly how long I've been talking? Probably not. But why not? I clearly asked. It's likely because of how I phrased the question. --- ## Bystander Effect ![039](/images/guides/incident-response-guide/incident_response.039.webp) *039. Bystander effect.* I said "Can someone...". This is called the [bystander effect](https://en.wikipedia.org/wiki/Bystander_effect). Everyone assumed someone else was doing it, so no one ended up doing it. If by some chance, someone actually did do it, you won't know who it is anyway, or if they've even started. A good example of this is if there's a medical emergency, and you shout "Somebody call 911!", you'll find that no one does, because everyone assumes someone else is doing it. If you're ever in that situation, you want to point to someone and say "You, call 911". Then it'll get done. > **Localization:** If you're outside the US, substitute 911 for whatever your local emergency number is. You probably don't want to be shouting "You, call 911" if you're in Europe for example. So what I should've done was point to someone in the room and say, > You, please keep track of the time and give me a little wave when we get to 30 minutes, starting now. Understood? See how different that was? --- ## Assigning Tasks ![040](/images/guides/incident-response-guide/incident_response.040.webp) *040. Assigning tasks. [Docs Reference](/ops-guides/incident-response-guide/incident-commander#assigning-tasks)* In the context of an incident, that might look like this. It's a little more verbose than "Can someone investigate the cause?", but it's a lot clearer what I want to happen. Brings us back to clear is better than concise from earlier. Several important things happened in this exchange as I was assigning the task. --- ## Assign Specific People ![041](/images/guides/incident-response-guide/incident_response.041.webp) *041. Assign tasks to a specific person.* First, the task was assigned **directly to a specific person**. It’s ok to assign it to a role to “DBA on-call…”, etc. But it must be a single individual. Don't assign things to a group, because they won't get done. --- ## Time Limit ![042](/images/guides/incident-response-guide/incident_response.042.webp) *042. Time-box all tasks.* Second, the task was given a time-limit. This means the SME knows exactly how long until I come back to them for an answer, so they won’t be surprised or caught off guard. It sets the expectations. --- ## Acknowledgement ![043](/images/guides/incident-response-guide/incident_response.043.webp) *043. Get acknowledgement.* Finally, I confirmed that they had understood the instructions and are going to carry them out. So I don’t come back in 5 minutes and find they never started, or have additional questions. --- ## Followup ![044](/images/guides/incident-response-guide/incident_response.044.webp) *044. Followup.* Then after the time is up, we can simply ask for the results of their task. Of course they will always have the right answer the first time and will never need any additional time to investigate, right? --- ## Need More Time? ![045](/images/guides/incident-response-guide/incident_response.045.webp) *045. What if they need more time?* It's not always going to be the case that things get done within the timeframe. So what do you do if, after 5 minutes, they need more time? Don’t just give them another arbitrary time limit, because they’ll keep coming back and you’re just going to be wasting time giving them 5 minutes chunks for an hour. Instead, ask your experts how long they need. --- ## More Time ![046](/images/guides/incident-response-guide/incident_response.046.webp) *046. More time.* This isn't going to be like in the movies, where you ask how long someone needs, they say two hours and you slam you fist on a table and say "You've got one!". You need to **trust in your experts** to give you accurate estimates, and give them the time they need. Putting people under unreasonable pressure is only going to lead to mistakes being made. > **You can do this the first time too.:** You can also just ask your experts how long they need the first time you hand out the task instead of picking a time yourself. Sometimes we've found it easier to give a time-limit ourselves if it's an action that's been done before and we have a rough idea of how long it should take. But there's nothing wrong with asking how long someone needs as you assign the task either. --- ## Solving Incidents (1) ![047](/images/guides/incident-response-guide/incident_response.047.webp) *047. Flow chart for solving incidents.* And we just keep following this pattern until the incident is resolved. 1. Ask for a status from your experts. 1. Decide on an action based on what you’re told, gaining consensus for the plan. 1. Assign the task out. 1. Follow up with the tasks once done, and repeat if there are still problems. --- ## Solving Incidents (2) ![048](/images/guides/incident-response-guide/incident_response.048.webp) *048. Another flow chart for solving incidents..* More generally, we’re following [this cycle](/ops-guides/incident-response-guide/incident-commander#handling-incidents) for each incident. We size-up the situation, stabilize things (that's the loop we just showed), keep everyone updated as to what's going on, then verify the situation is fixed before ending the response. If it's not fixed, we start again. --- ## Ignore the IC ![049](/images/guides/incident-response-guide/incident_response.049.webp) *049. "Ignore the IC, do what I say!"* Uh oh, an executive has joined the response and is trying to override the IC’s decisions. That’s not great. Remember that the IC is the ultimate authority in incident response, their decisions are the ones that matter. So how do you handle the awkward situation when someone tries to override those decisions? We have a top tip here, a great question to keep in your tool belt as an incident commander. A simple question that can immediately diffuse this situation. --- ## Do You Wish To Take Command? ![050](/images/guides/incident-response-guide/incident_response.050.webp) *050. Do you wish to take command? [Docs Reference](/ops-guides/incident-response-guide/incident-commander#executive-swoop---overriding-the-incident-commander)* > Do you wish to take command? Watch how quickly they don’t answer with “yes”. If they do, great! You’re off the hook and can respond with, > Understood. Everyone on the call be advised, I'm handing over command to executive A. They are now the Incident Commander. But most of the time they’ll say either say "No"", or not answer at all, in which case you can continue on as normal, perhaps saying, > In that case, please cause no further interruptions or I will have to remove you from the call. But "Do you wish to take command?" is the most useful phrase for dealing with that kind of executive hostile takeover. --- ## Executive Swoop ![051](/images/guides/incident-response-guide/incident_response.051.webp) *051. Executive swoop.* This is a class of problem we call Executive Swoop. Well, actually it's "Executive Swoop and Poop", but I was asked not to put that on the slide. The previous example isn't typical though. It's rare for someone to come in and purposefully start causing a problem like that. We're going to look at some more common examples of executive swoop next, but it's worth noting that **none of these happen maliciously**. No executive joins with the intent of hindering the process, they’re trying to motivate people and find out what’s going on. It’s their business too! Making sure your executives understand why these things are a problem is important, so be sure to followup after an incident if these things happen. --- ## Let's Resolve This in 10 Minutes ![052](/images/guides/incident-response-guide/incident_response.052.webp) *052. Let's try and resolve this in 10 minutes.* > Let's try and resolve this in 10 minutes please! This one definitely wasn't said by anyone at PagerDuty ever. Nope. Definitely not. On the surface this seems pretty benign. The executive is merely trying to motivate staff and encourage them to solve the problem quickly, right? Unfortunately, that's not how others on the call are going to interpret it. Instead they're more likely to be sarcastically thinking "Well, I was going to take an hour, but since you've said that, OK I'll do it in 10 minutes". It assumes people aren’t already working as hard as possible to solve the problem. It demotivates responders, and adds additional stress. Your job as IC is to nip this in the bud and keep things on track. --- ## Keep Comments Until The End ![053](/images/guides/incident-response-guide/incident_response.053.webp) *053. Keep your comments until the end. [Docs Reference](/ops-guides/incident-response-guide/incident-commander#executive-swoop---anti-motivation)* To keep things moving, you need to remind the executive of what's going on, and direct questions to be handled at a later time. It may come across slightly abrupt, but it gets the point across quickly and allows you to keep moving. Most people will pick up on the subtext here. > We're in the middle of an incident, please keep your comments until the end. Remember, **don't be mean**, just state the facts and keep things flowing. We're not trying to shame people or make them feel bad, we're trying to keep our incident moving towards a resolution. --- ## Spreadsheet of Affected Customers ![054](/images/guides/incident-response-guide/incident_response.054.webp) *054. Can I get a spreadsheet of affected customers?* > Can I get a spreadsheet of all affected customers? Another one that's definitely never been mentioned on any PagerDuty incident response call ever. An exec joins the call and wants to get a list of impacted customers. The problem is that in order to find that out, we'll need to take someone away from the effort of responding to the incident, at a time when we need them most. If you can spare the resources, then feel free to dedicate some to finding the information. But more often than not you wont have the resources to spare. So we can just tell the executive that. --- ## The Incident Takes Priority ![055](/images/guides/incident-response-guide/incident_response.055.webp) *055. The incident takes priority. [Docs Reference](/ops-guides/incident-response-guide/incident-commander#executive-swoop---wants-information)* > We can either get you that list, or fix the incident. Not both. The incident takes priority. Note how this isn't phrased as a question, it wasn't "We can either get you that list or fix the incident, which do you want?". The **incident commander has already made the decision**, they're simply letting the executive know what it is. Remember that the IC is still in charge, you don't want to cede decision making to someone else during an incident. --- ## Really a SEV-1? ![056](/images/guides/incident-response-guide/incident_response.056.webp) *056. Is this really a SEV-1?* > Is this really a SEV-1? Oh look, it's another one that's never ever happened at PagerDuty. We used to have a really big problem with this one. We'd start incident response calls, then spend the first 10 minutes arguing over whether it was a `SEV-3` or a `SEV-2`. By the time we were finished, we would be 10 minutes into a `SEV-1` and have made no progress. So now we have a rule. We don't discuss incident severity during the call. If we can't decide between two, we always assume it's the higher severity and move on. Don't litigate severities during an incident. It's a waste of time. --- ## Treating as a SEV-1 ![057](/images/guides/incident-response-guide/incident_response.057.webp) *057. We're treating this as a SEV-1. [Docs Reference](/ops-guides/incident-response-guide/incident-commander#executive-swoop---questioning-severity)* So the IC will need to make it clear we don’t discuss, and that we’re treating it as a `SEV-1`. It may turn out to be a `SEV-4`, who knows, it doesn’t matter. That's a discussion for the postmortem. > We do not discuss incident severity during the call. We're treating this as a SEV-1. Once you’ve spun up the gears of incident response, you may as well finish the process, if anything it just gives you all more practice. --- ## Notify Stakeholders ![058](/images/guides/incident-response-guide/incident_response.058.webp) *058. Notify stakeholders.* Pretty much all of these examples of executive swoop can be pre-empted by **involving stakeholders in the process**, giving them a way to stay up to date. At PagerDuty we have a separate Slack room just for incident updates. It's less noisy than our main response room, and gives succinct updates for folks who want it. This allows execs to stay in the loop, and also ask questions without affecting the main response. In our process, the Internal Liaison is responsible for monitoring and updating that channel. Stakeholders are not allowed to talk on our response call, or in our main incident response chat room. They must take all discussion to the updates room or via the Internal Liaison. The Incident Commander is responsible for keeping our primary communication channels free of those types of discussions or questions, and direct people towards the Internal Liaison. --- ## Belligerent Responder ![059](/images/guides/incident-response-guide/incident_response.059.webp) *059. The belligerent responder.* There are other things than can hinder your response though that don't fall under the category of executive swoop. This one we call the belligerent responder. It was originally called _The Drunk Engineer_, but again, I was asked not to put that in the slide. There are plenty of awkward situations that can present themselves on response calls. There can be big ego’s and strong opinions. What do you do when someone on the call is being belligerent and hampering the response process? You need to be firm, and let them know what will happen if they continue. --- ## Disruptive ![060](/images/guides/incident-response-guide/incident_response.060.webp) *060. You're being disruptive. [Docs Reference](/ops-guides/incident-response-guide/incident-commander#the-belligerent-responder)* > You're being disruptive. Please stop, or I will have to remove you from the call. State the facts, **give them a way out to save face**, but state what will happen if they don’t. No second chances, follow through on the action if they don’t respond. It can be harsh, but that’s what needs to be done. Again, we've phrased this in a particular way. We said "I will have to remove you", rather than "I will remove you". It makes it seem like the decision is out of your hands and that you'll be forced to do it. It can make it less personal and less likely to cause awkward problems after the call is over. --- ## Do Responders Get Tired? ![061](/images/guides/incident-response-guide/incident_response.061.webp) *061. Do responders get tired?* Another problem that can pop up during a response is when we have long running incidents. Do we use the same IC for a 12 hour incident? Do IC's even get tired? Well, of course they do! They're people too. This is another human cost associated with incident response that you want to try and minimize. All of the roles in the response process can be mentally fatiguing. When you get tired you start to forget things and make mistakes, so it's important to try and keep a fresh perspective as often as you can. --- ## Handovers Are Encouraged ![062](/images/guides/incident-response-guide/incident_response.062.webp) *062. Handovers are encouraged.* For this reason, we **actively encourage handovers** in our process. Usually every hour or so is what we recommend, but it's at the discretion of the people involved. 3 hours would be the absolute upper limit where we would start requiring a handover. > **Make sure to rest after handing over.:** It can be very tempting after handing over command to want to stay on the call and listen in, to try and stay on top of things and see how things are going. **Avoid this at all costs.** Once handing over your role to someone else, you should leave the response call and all associated chat rooms. Take a break away from anything related to the incident. > > You may be required to take the role again later if the incident is very long running. If you've stayed listening in the entire time, then while you would be up to speed, you would still be fatigued and would not be able to respond as efficient as if you'd taken a real break. Handing over command is important, and really easy. Get the new IC up to speed out-of-band from the main discussion. We privately message on Slack for example. If you have a deputy, then it's even better, because they would already be on the call and up to speed. Then you handover. --- ## Handover ![063](/images/guides/incident-response-guide/incident_response.063.webp) *063. Handover. [Docs Reference](/ops-guides/incident-response-guide/incident-commander#transfer-of-command)* State that you are handing over command, and then the new IC begins as if it were a new call. Simple! Since we want to be able to handover, it's important to have as many trained IC's as you can. The more you have, the better. Ideally you want enough for at least a daily rotation. > **How do you get lots of trained Incident Commands?:** This is a question we get a lot, and not something we have a golden solution for. Many people are hesitant to take on the responsibilities of being an IC in addition to their current work and on-call responsibilities, which is a perfectly valid concern. One of the best ways we found to increase the pool of Incident Commanders is to encourage folks outside of normal engineering teams to take on the role. Those who wouldn't normally be part of an on-call rotation. Not only can they provide an outside perspective during incidents that is sometimes missing, but it can also help to build further empathy with others in the organization who regularly go on-call. --- ## Anti-Patterns ![064](/images/guides/incident-response-guide/incident_response.064.webp) *064. Anti-Patterns. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns)* Let’s talk about some [anti-patterns](/ops-guides/incident-response-guide/anti-patterns). Things which seem like they would help incident response, but really don’t. Knowing these now will save you the headaches and growing pains we went through. --- ## Getting Everyone on the Call ![065](/images/guides/incident-response-guide/incident_response.065.webp) *065. Getting everyone on the call. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#getting-everyone-on-the-call)* Believe it or not, we used to page every single engineer at PagerDuty whenever we had a `SEV-2`. I'm not joking. It was horrible. It worked great when we only had 5 engineers, less so when we had 50. It's important to **maintain an effective [span of control](/ops-guides/incident-response-guide/glossary#span-of-control)** during an incident. No one person should have more than ~7 people reporting to them. Any more than that and you have too many cooks in the kitchen. Waking up 30 engineers at 3am causes untold damage. Please don't do it. --- ## Not Letting Responders Leave ![066](/images/guides/incident-response-guide/incident_response.066.webp) *066. Not letting responders leave. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#forcing-everyone-to-stay-on-the-call)* Remember I mentioned at the beginning that one of our goals is to reduce the cost associated with an incident? That includes the human cost. Waking people up at 3am is costly. But keeping those people on a call in which they can’t do anything is even worse. So if some responders are no longer needed, let them leave the call. Your co-workers time is more costly than servers, don’t burn them out! I would recommend you not list everyone you want to leave the call, since you might miss people. Better to say who you want to stay, that way it also solidifies who you want to stay too. For example, > Operations, Support, and Rich, please stay on the call. Everyone else, feel free to drop off at your discretion. --- ## Too Frequent Status Updates ![067](/images/guides/incident-response-guide/incident_response.067.webp) *067. Too frequent status updates. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#too-frequent-status-updates)* Executives especially love frequent status updates. But providing them too frequently can cause things to get out of hand. If it takes 5 minutes to write an update, and they want an update every 5 minutes, you can start to see how long it's going to take to solve the incident. At PagerDuty, we keep our internal updates to about once every 20-30 minutes. Writing the update takes away time from solving the incident, so that needs to be balanced. This cadence has worked well for us. --- ## Being Overly Focussed On An Issue ![068](/images/guides/incident-response-guide/incident_response.068.webp) *068. Being overly focussed on an issue. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#being-too-focussed-on-the-problem-in-front-of-you)* The IC is generally the person who has the bigger picture of what's going on. But there can be a tendency for responders to become too focussed on the problem they see in front of them, rather than taking the bigger picture into account. This usually presents itself on an incident call with an SME constantly bringing up the same issue without listening to instructions from the incident commander, and having tunnel vision for the specific issue on their system. Try not to get tunnel vision or chase red herrings. Always keep the bigger picture in mind. --- ## Requiring Deeply Technical ICs ![069](/images/guides/incident-response-guide/incident_response.069.webp) *069. Requiring deeply technical incident commanders. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#requiring-incident-commanders-to-have-deep-technical-knowledge)* We used to require that all of our Incident Commanders be experienced engineers with deep technical knowledge of all PagerDuty systems. **This was one of our bigger mistakes.** Remember that IC's aren't responders, they aren't the ones actually fixing the problem, so they don't need deep technical knowledge. IC's are experts at coordinating the response, not at solving technical issues. You should be relying on your SMEs for that. **Removing the restriction on technical knowledge led to a dramatic increase in our pool of available incident commanders**, and didn't have any effect on our ability to respond to incidents. We now have ICs from all across the organization, with even more currently in training. It's already hard enough to get people to want to be an IC, so don't add further unnecessary restrictions to your pool. --- ## Taking on Multiple Roles ![070](/images/guides/incident-response-guide/incident_response.070.webp) *070. Taking on multiple roles. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#trying-to-take-on-multiple-roles)* In past PagerDuty incidents, we've had instances where the Incident Commander has started to assume the Subject Matter Expert role and attempted to solve the problem themselves. This typically happens when an engineer is the IC, and the incident is something to do with a system they helped to build. It's very tempting to say "I know how to fix this!" and jump in and solve the problem yourself. But you cannot do that as an IC. Inevitably, the incident will be bigger than you think, and while you're trying to fix you little fire, there's another one happening in another service and you've lost sight of the bigger picture. You cannot take on another role at the same time as being an Incident Commander. If you absolutely are the only person who can solve the problem, then handover to another IC and assume the role of an SME for the remainder of the incident. --- ## Litigating Policy ![071](/images/guides/incident-response-guide/incident_response.071.webp) *071. Litigating policy during an incident. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#discussing-process-and-policy-decisions-during-the-incident-call)* Just like with severities, policy and processes should not be discussed during an incident. The current process should be followed, and any concerns should be raised afterwards, either during a postmortem or directly to the team managing the incident response process. Trying to change the process during an incident is only going to prolong the current incident. That's not the time to have that discussion. --- ## Averse to Process Changes ![072](/images/guides/incident-response-guide/incident_response.072.webp) *072. Being averse to process changes. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#being-averse-to-policy-and-process-changes)* Finally, once a stable process is in place and incidents are getting resolved, there can be lots of hesitation and resistance to changing that process. "If it ain't broke don't fix it". As your company grows, your response will need to change. Holding on to your old processes and practices for too long can hinder your incident response going forward. Don't be reckless, of course, but try to introduce sensible changes and don't be afraid to make changes which might slow things down in the short-term, but will make things faster in the long-run. These are the hardest changes to make, but ultimately the most worthwhile. --- ## Resolved ![073](/images/guides/incident-response-guide/incident_response.073.webp) *073. Resolved.* OK, so if all goes well, you're incident will get resolved. That means we're all done and we can go home, right?! Well, not quite yet. There's still one more thing we need to do. --- ## Don't Neglect The Postmortem ![074](/images/guides/incident-response-guide/incident_response.074.webp) *074. Don't neglect the postmortem. [Docs Reference](/ops-guides/incident-response-guide/anti-patterns#neglecting-the-postmortem-and-followup-activities)* We need to do a [postmortem](/ops-guides/incident-response-guide/postmortem-process). Or after-action review, learning review, retrospective, incident report, etc. Whatever you want to call it, the name doesn't matter as much as actually doing one! Don't make the mistake of neglecting a postmortem after an incident. Without a postmortem you fail to recognize what you're doing right, where you could improve, and most importantly, how to avoid making the same exact mistakes next time around. A well-designed, blameless postmortem allows teams to continuously learn, and serves as a way to iteratively improve your infrastructure and incident response process. Postmortems are an important followup action and should never be missed. Even if you triggered an incident and then decided it was a false alarm, you should still do a brief postmortem. You just mobilized a response when you didn't need to, so you want to identify how you can make sure that doesn't happen again. --- ## Create the Postmortem ![075](/images/guides/incident-response-guide/incident_response.075.webp) *075. Create the postmortem. [Docs Reference](/ops-guides/incident-response-guide/postmortem-template)* The first step is to create the postmortem itself. This is the job of the Incident Commander. I don't mean they're going to write the entire postmortem, they're just going to create the [initial template](/ops-guides/incident-response-guide/postmortem-template). We want to make sure that a link exists so that when people ask "When will we know what went wrong?" you have something to give them. --- ## Pick an Owner ![076](/images/guides/incident-response-guide/incident_response.076.webp) *076. Pick an owner.* Then the IC needs to assign an owner. Remember how we assigned tasks to specific individuals? It’s no different with a postmortem. Make sure there’s a clear owner, and that it's an **individual** and not a team. The most surefire way to make sure a postmortem doesn't get completed is to assign it to a team instead of a specific person. The person you assign is responsible for completing the postmortem, but they don't have to do it all themselves. They can delegate out sections as they see fit. But you need someone on the hook for making sure it gets finished. As with assigning other tasks, you also want to give them a deadline, and make sure they've understood that they're responsible for completing the postmortem. --- ## Blameless ![077](/images/guides/incident-response-guide/incident_response.077.webp) *077. Blameless.* Importantly, postmortems need to be **blameless**. If someone made a mistake, you just spent lots of money training them to never do it again. **You can’t fire your way to reliability.** Let's say Bob ran a command which deleted your entire database. Your postmortem shouldn't be "Bob made a mistake and should be fired or have his access revoked!". The postmortem should be "Why is our system configured in a way which allowed a single user to delete the entire database?". If you name and shame people in a postmortem, it demotivates everyone. Next time someone makes a mistake, they're not going to own up to it, because they'll be afraid of getting shamed too. You want people to bring up problems, because then you get to fix them quickly. --- ## Review the Process ![078](/images/guides/incident-response-guide/incident_response.078.webp) *078. Review the process too!* Don’t forget to also review the process as part of the postmortem. How can you change the process to make it better? What isn’t working out well? Just as it’s important to learn from and fix mistakes in your software, you want to do the same for your incident response process. --- ## Practice ![079](/images/guides/incident-response-guide/incident_response.079.webp) *079. Practice makes perfect.* Finally, you want to practice your incident response process as much as you can. **You don't want to be doing it for the first time during a real incident.** Reading about it is one thing, but going through the motions is very different. Start by running mock incidents. Then treat your smaller incidents as if they're larger ones. If you trigger incident response and find it's not a real incident, treat it like one anyway since it's free practice. At PagerDuty, we run something called [Failure Friday](https://www.youtube.com/watch?v=XKl-7hB3paY) where we purposefully inject failure into our systems to test their resilience. We treat this like a major incident, with an incident commander and everything. It allows us to practice while we're not under the stress of a normal incident. We also play a game called [Keep Talking And Nobody Explodes](https://www.keeptalkinggame.com). Yes, that's right, we play video games at work. But we've found that this game really helps to simulate a lot of the things an incident commander has to deal with, and is a great way to get some stress free practice. The bottom line is to practice as much as you can, so that when you do have the inevitable incident, your response is just routine. --- ## Open-Source Response Docs ![080](/images/guides/incident-response-guide/incident_response.080.webp) *080. Our open-source incident response documentation.* This was just a brief taste of the training we run at PagerDuty for our own Incident Commanders. We had nowhere near enough time to cover everything. Good news though! We have published our entire incident response process online. It is an exact copy of our internal documentation only with things like phone numbers removed. It's complete free to use, and is open-sourced under an Apache 2 license so you can use it in your own organizations. [It's on GitHub](https://github.com/PagerDuty/incident-response-docs) and we do accept pull requests if you spot any mistakes or have improvement suggestions. Everything I've talked about today can be found in the documentation, and there's lots of great [additional reading material](/ops-guides/incident-response-guide/reading) if you want to learn more. --- ## Response Docs Image ![081](/images/guides/incident-response-guide/incident_response.081.webp) *081. Response docs screenshot.* It looks pretty too. --- ## Summary ![082](/images/guides/incident-response-guide/incident_response.082.webp) *082. Summary.* Incident command training is useful in so many situations outside of a server exploding in the night. It can be applicable to many different things in your life, whether it's staying calm after a fender bender on the highway, or jumping into action to help during a major natural disaster. In my own life I've regularly compared the role of a parent with that of an Incident Commander. You'd be surprised at how useful it can be in everyday situations. Anyway, with that, I'll leave you with a quick summary of the main things we discussed today. Thanks! > **Questions?:** If you have questions about this training material, feel free to reach out to the [PagerDuty Advocates team](mailto:advocates@pagerduty.com) --- ## Image Credits ![083](/images/guides/incident-response-guide/incident_response.083.webp) *083. Image credits.* > **Image Credits:** Here are the credits for all the images used throughout this training material. --- ## PagerDuty University ![084](/images/guides/incident-response-guide/incident_response.084.webp) *084. PagerDuty University.* > **PagerDuty University:** Shameless plug: If you're interested in our longer courses on this and other topics, including how to use PagerDuty to do it, we offer a variety of different training programs as part of [PagerDuty University](https://university.pagerduty.com/) — from private full-day courses at your own offices, to public instructor-led training. --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/internal-liaison # Internal Liaison So you want to be an internal liaison? You've come to the right place! So you want to be an Internal Liaison? You've come to the right place! ## Purpose The purpose of the Internal Liaison is to be the primary individual in charge of notifying internal stakeholders of the current conditions, and informing the Incident Commander of any relevant feedback from stakeholders as the incident progresses. They are also responsible for mobilizing additional responders during an incident if requested by the incident commander. It's important for the rest of the command staff to be able to focus on the problem at hand, rather than worrying about crafting messages to internal teams, or having to find a user's contact information in order to page them. Your job as Internal Liaison is to listen to the call, watch the incident Slack room, and follow instructions from the IC. The Incident Commander will instruct you to notify stakeholders of the incident and keep them updated at various points throughout the call. They will also instruct you to page additional responders should it be necessary. ## Prerequisites Before you can be an Internal Liaison, it is expected that you meet the following criteria. Don't worry if you don't meet them all yet, you can still continue with training! * Excellent verbal and written **communication skills**. ## Responsibilities Read up on our [Different Roles for Incidents](/ops-guides/incident-response-guide/different-roles) to see what is expected from an Internal Liaison, as well as what we expect from the other roles you'll be interacting with. ## Training Process There is no formal training process for this role, reading this page should be sufficient for most tasks. ## Incident Call Procedures and Lingo The [Steps for Internal Liaison](/ops-guides/incident-response-guide/during-an-incident#steps-for-internal-liaison) provide a detailed description of what you should be doing during an incident. Here are some examples of phrases and patterns you should use during incident calls. ### Keep Track of Responders As you listen to the call, you should keep track of the responders to the call as you hear them speak. Make a note on a piece of paper, or use the `!ic responders` to see who they are. The IC may ask you who is on-call for a particular system, and you should know the answer, and be able to page them. > Do we have a representative from [X] on the call? > (pause) > Hearing no response, Internal Liaison, please page the [X] on-call. You can page them however you see fit, phone call, etc. ### Mobilizing Additional Responders As you listen to the call, the IC may ask you to reach out to another internal team and include them in the response. Teams such as Legal, Marketing, Finance, etc may be called upon. You should be ready to page such teams as necessary. > IC: Internal Liaison, please page the Marketing team and ask them to join the call. > IL: Understood, paging Marketing team. ### Provide Executive Status Updates Provide regular status updates on Slack (roughly every 30mins), giving an executive summary of the current status during SEV-1 incidents. Keep it short and to the point, and use `@here`. Mention the current state, the actions in progress, customer impact, and expected time remaining. It's OK to miss out some of those if the information isn't known. > @here: We are in SEV-1 due to X. Current actions in progress are to do Y. Expecting 3 mins to complete that action. Once action is complete, system should recover on its own within 5 minutes. --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/pagerduty-for-crmops # PagerDuty for CRMOps PagerDuty's Operations Cloud provides various tools and features that will help your organization manage crises effectively. ## PagerDuty Configuration How to set up your Crisis Response Management instance in PagerDuty: [PagerDuty Mobile app](/get-started/mobile-app) - Ask each member to install and configure the mobile app for maximum reachability. [User Management](/account-admin/manage-users#add-users) - Make sure you’ve added your Executive Crisis Leadership and Crisis Response Team members to the system. [Contact information](/account-admin/user-profile) - Ask each member to log into the web application and update their profile information including their phone, email and SMS contact information especially if they’ve changed devices. ![PagerDuty user contact information settings](/images/guides/incident-response-guide/09_usercontactinfo.webp) [Notification rules](/account-admin/user-profile#notification-rules) - Ask each member to set their high urgency, low urgency, handoff and subscriber notification rules under their profile. ![Use multiple contact methods for high urgency incidents](/images/guides/incident-response-guide/10_highurgencynotifications.webp) [Teams](/account-admin/teams) - Create teams for your Executive Crisis Leadership Team, each of your Crisis Team Leaders, and essential support functions like Crisis Communications, IT or Legal [Services](/incident-management/services/services-and-integrations#create-a-service) - Create and configure a service for each of your crisis categories led by your Crisis Team Leaders, e.g., supply chain, human resources, critical infrastructure, geopolitics, physical security, etc. [Urgency](/incident-management/services/configurable-service-settings#notification-urgency) - Set your notification urgency for each service whether high, low, dynamic or based on operating hours [Escalation policies](/incident-management/schedules/escalation-policies#create-an-escalation-policy) - Decide who gets notified first and how long before the notification escalates to the next team member and configure round robin scheduling if you wish to alternate per crisis ![Escalation policies determine which responders are contacted](/images/guides/incident-response-guide/11_escalationpolicy.webp) [Integrations](/incident-management/services/services-and-integrations#add-integrations-to-an-existing-service) - Add your instant messaging, video conferencing tool or create a custom email integration or connections to other systems for triggering alerts [Schedules](/incident-management/schedules/schedule-basics#create-a-schedule) - Create your on-call rotations for the teams associated with each crisis service ![Using multiple layers in schedules helps teams create full coverage](/images/guides/incident-response-guide/12_schedulelayers.webp) [Incident Priority](/incident-management/incidents/incident-priority) - Add your custom classification scheme for your crisis response escalation levels [Incident workflows](/ai-automation/automation/incident-workflows) - Create your workflows for each crisis based on conditions such as priority, status and urgency using system templates or from scratch ![Incident workflows can help with communication and coordination](/images/guides/incident-response-guide/13_incidentworkflows.webp) [On-call readiness report](/incident-management/schedules/readiness-reports) - Confirm that your teams are on-call ready and properly configured [Postmortem template](/incident-management/incidents/post-incident-reviews-and-postmortems#customize-the-postmortem-template) - Configure your postmortem template to fit your needs post-crisis [Status pages](/incident-management/communicate/status-pages-overview) - Configure your status page templates for internal stakeholders ![Use status updates to communicate with stakeholders](/images/guides/incident-response-guide/14_incidentstatusupdates.webp) --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/postmortem-process # Postmortem Process For every major incident (SEV-2/1), we need to follow up with a postmortem. A blame-free, detailed description, of exactly what went wrong in order to cause For every major incident (SEV-2/1), we need to follow up with a postmortem. A blame-free, detailed description, of exactly what went wrong in order to cause the incident, along with a list of steps to take in order to prevent a similar incident from occurring again in the future. The incident response process itself should also be included. > **Don't Neglect the Postmortem:** Don't make the mistake of neglecting a postmortem after an incident. Without a postmortem, you fail to recognize what you're doing right, where you could improve, and most importantly how to avoid making the same exact mistakes next time around. A well-designed, blameless postmortem allows teams to continuously learn and serves as a way to iteratively improve your infrastructure and incident response process. ## Owner Designation The first step is designating a postmortem owner. This is done by the IC either at the end of a major incident call or very shortly after. You will be notified directly by the IC if you are the owner for the postmortem. The owner is responsible for populating the postmortem, looking up logs, managing the follow-up investigation, and keeping all interested parties in the loop. Please use Slack for coordinating follow-up. A detailed list of the steps is available below: ## Owner Responsibilities As owner of a postmortem, you are responsible for the following, * Scheduling the postmortem meeting (on the shared calendar) and inviting the relevant people (this should be **scheduled within 3 calendar days** for a SEV-1 and **5 business days** for a SEV-2). * Investigating the incident and pulling in whomever you need from other teams to assist in the investigation. * Updating the page with all of the necessary content. * Creating follow-up JIRA tickets (_You are only responsible for creating the tickets, not following them up to resolution_). * Reviewing the postmortem content with appropriate parties before the meeting. * Running through the topics at the postmortem meeting (the IC will "run" the meeting and keep the discussion on track, but you will likely be doing most of the talking). * Communicating the results of the postmortem internally. ## Status Descriptions Our postmortems have a "Status" field which indicates where in our process the postmortem currently is. Here's a description of the values and how we use them. | Status | Description | |-|-| | **Draft** | Indicates that the content of the postmortem is still being worked on. | | **In Review** | The content of the postmortem has been completed, and is ready to be reviewed during the postmortem meeting. | | **Reviewed** | The meeting is over and the content has been reviewed and agreed upon.
If there is an "External Message," the Customer Support team will take the message and update our status page as appropriate. | | **Closed** | No further actions are needed on the postmortem (outstanding issues are tracked in JIRA).
If no "External Message," you can skip straight to this once the meeting is over.
If there's an "External Message", then the Support team will update it to this status once the message is posted. | ## Postmortem Once you've been designated as the owner of a postmortem, you should start creating one and updating it with all the relevant information. 1. (If not already done by the IC) Create a new postmortem for the incident. 1. Schedule a postmortem meeting for within **3 calendar days** for a SEV-1 and **5 business days** for a SEV-2. You should schedule this before filling in the postmortem, just so it's on the calendar. * Create the meeting on the "Incident Postmortem Meetings" shared calendar. 1. Begin populating the page with all of the information you have. * The timeline should be the main focus to begin with. * The timeline should include important changes in status/impact and key actions taken by responders. * Go through the history in Slack to identify the responders and add them to the page. * Identify the Incident Commander and Scribe in this list. 1. Populate the postmortem with more detailed information. * For each item in the timeline, identify a metric, or some third-party page where the data came from. This could be a link to a Datadog graph, a SumoLogic search, a post, etc. Anything which shows the data point you're trying to illustrate in the timeline. * Add a link to the incident call recording. 1. Perform an analysis of the incident. * Capture all available data regarding the incident. What caused it, how many customers were affected, etc. * Any commands or queries you use to look up data should be posted in the page so others can see how the data was gathered. * Capture the impact to customers (generally in terms of event submission, delayed processing, and slow notification delivery) * Identify the underlying cause of the incident (what happened and _why_ did it happen). 1. Write the external message that will be sent to customers. This will be reviewed during the postmortem meeting before it is sent out. * Avoid using the word "outage" unless it really was a full outage, use the word "incident" or "service degradation" instead. Customers generally see "outage" and assume the worst. * Look at other examples of previous postmortems to see the kind of thing you should send. 1. Post a link to the postmortem into Slack to be reviewed for style and content by internal parties, you should try to do this about **24 hours before** the meeting is scheduled. * Experienced postmortem writers will give you feedback on the level of detail and content of the postmortem. This avoids wasted time during the meeting. 1. Attend the postmortem meeting (see below section for more information). 1. Create any follow-up action JIRA tickets (or note down topics for discussion if we need to decide on a direction to go before creating tickets), * Go through the history in Slack to identify any TODO items. * Label all tickets with their severity level and date tags. * Any actions which can reduce reoccurrence of the incident. * (There may be some trade-off here, and that's fine. Sometimes the ROI isn't worth the effort that would go into it). * Identify any actions which can make our incident response process better. * Be careful with creating too many tickets. Generally we only want to create things that are P0/P1's. Things that absolutely should be dealt with. 1. Communicate internally so we can learn from the incident. * Send out an internal email to the relevant stakeholders describing the results and key learnings. * Include a link to the postmortem. ## Postmortem Meeting These meetings should generally last 15-30 minutes and are intended to be a wrap up of the postmortem process. We should discuss what happened, what we could've done better, and any follow-up actions that we need to take. The goal is to suss out any disagreement on the facts, analysis, or recommended actions, and to get some wider awareness of the problems that are causing reliability issues for us. You should invite the following people to the postmortem meeting, * Always * The Incident Commander. * The Incident Commander Shadowee (if there was one). * Service owners involved in the incident. * Key engineer(s)/responders involved in the incident. * Engineering manager for impacted systems. * Product manager for impacted systems. * Optional * Customer Liaison. (Only SEV-1 incidents) The Incident Commander will run the meeting, keeping the discussion focused and on track. However the postmortem owner will likely be doing most of the talking as they walk through the postmortem report. A general agenda for the meeting would be something like, 1. Recap the timeline, to make sure everyone agrees and is on the same page. 1. Recap important points, and any unusual items. 1. Discuss how the problem could've been caught. * Did it show up in [canary](https://martinfowler.com/bliki/CanaryRelease.html)? * Could it have been caught in tests, or loadtest environment? 1. Discuss customer impact. Any comments from customers, etc. 1. Review action items that have been created, discuss if appropriate, or if more are needed, etc. ## Examples Here are some examples of postmortems from other companies as a reference, * [LastPass](https://blog.lastpass.com/2015/06/lastpass-security-notice/) * [AWS](https://aws.amazon.com/message/5467D2/) * [Twilio](https://www.twilio.com/blog/2013/07/billing-incident-post-mortem-breakdown-analysis-and-root-cause.html) * [Heroku](https://status.heroku.com/incidents/151) * [Netflix](https://netflixtechblog.com/post-mortem-of-october-22-2012-aws-degradation-efcee3ab40d5) * [GOV.UK Rail Accident Investigation](https://www.gov.uk/government/publications/kyle-beck-safety-digest/near-miss-at-kyle-beck-3-august-2016) * [A List of Postmortems!](https://github.com/danluu/post-mortems) ## Useful Resources * [Advanced PostMortem Fu and Human Error 101 (Velocity 2011)](https://www.slideshare.net/jallspaw/advanced-postmortem-fu-and-human-error-101-velocity-2011) * [Blame. Language. Sharing.](https://fractio.nl/2015/10/30/blame-language-sharing/) --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/postmortem-template # Postmortem Template PagerDuty's postmortem template, covering owner, meeting scheduling, overview, contributing factors, and resolution, used in the Incident Response Guide. This is a standard template we use for postmortems at PagerDuty. Each section describes the type of information you will want to put in that section. --- > **Guidelines:** This page is intended to be reviewed during a postmortem meeting that should be scheduled within 5 business days of any event. > Your first step should be to schedule the postmortem meeting in the shared calendar for within 5 business days after the incident. > Don't wait until you've filled in the info to schedule the meeting. Make sure the page is completed by the meeting. **Postmortem Owner:** _Your name goes here._ **Meeting Scheduled For:** _Schedule the meeting on the "Incident Postmortem Meetings" shared calendar, for within 5 business days after the incident. Put the date/time here._ **Call Recording:** _Link to the incident call recording._ ## Overview _Include a **short** sentence or two summarizing the contributing factors, timeline summary, and the impact. E.g. "On the morning of August 99th, we suffered a 1 minute SEV-1 due to a runaway process on our primary database machine. This slowness caused roughly 0.024% of alerts that had begun during this time to be delivered out of SLA."_ ## What Happened _Include a short description of what happened._ ## Contributing Factors _Include a description of any conditions that contributed to the issue. If there were any actions taken that exacerbated the issue, also include them here with the intention of learning from any mistakes made during the resolution process._ ## Resolution _Include a description of what solved the problem. If there was a temporary fix in place, describe that along with the long-term solution._ ## Impact _Be very specific here and include exact numbers._ | | | |-|-| | Time in SEV-1 | ?mins | | Time in SEV-2 | ?mins | | Notifications Delivered out of SLA | ??% (?? of ??) | | Events Dropped / Not Accepted | ??% (?? of ??) _Should usually be 0, but always check_ | | Accounts Affected | ?? | | Users Affected | ?? | | Support Requests Raised | ?? _Include any relevant links to tickets_ | ## Responders * _Who was the IC?_ * _Who was the scribe?_ * _Who else was involved?_ ## Timeline _Some important times to include: (1) time the contributing factor began, (2) time of the page, (3) time that the status page was updated (i.e. when the incident became public), (4) time of any significant actions, (5) time the SEV-2/1 ended, (6) links to tools/logs that show how the timestamp was arrived at._ | Time (UTC) | Event | Data Link | | ---------- | ----- | --------- | ## How'd We Do? ### What Went Well? * _List anything you did well and want to call out. It's OK to not list anything._ ### What Didn't Go So Well? * _List anything you think we didn't do very well. The intent is that we should follow up on all points here to improve our processes._ ## Action Items _Each action item should be in the form of a JIRA ticket, and each ticket should have the same set of two tags: “sev1_YYYYMMDD” (such as sev1_20150911) and simply “sev1”. Include action items such as: (1) any fixes required to prevent the contributing factor in the future, (2) any preparedness tasks that could help mitigate the problem if it came up again, (3) remaining postmortem steps, such as the internal email, as well as the status-page public post, (4) any improvements to our incident response process._ ## Messaging ### Internal Email _This is a follow-up for employees. It should be sent out right after the postmortem meeting is over. It only needs a short paragraph summarizing the incident and a link to this wiki page._ > Briefly summarize what happened and where the postmortem page (this page) can be found. ### External Message _This is what will be included on the status.pagerduty.com website regarding this incident. What are we telling customers, including an apology? (The apology should be genuine, not rote.)_ > Summary > What Happened? > What Are We Doing About This? --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/pre-crisis-phase # Pre-crisis Phase Take the time to stress test your work before the real world does it for you. Practice and simulations are crucial for flagging any gaps or blindspots you want ## Pre-crisis You now have your Executive Crisis Leadership team, your crisis response management configured in PagerDuty, your 100-page crisis management plan and a shorter scenario-driven playbook for crisis response. Now what? This is the time to stress test your work before the real world does it for you. This step is crucial for flagging any gaps or blindspots you want to be aware of ahead of a crisis. This is also an opportunity to build strong leadership, reduce mean time to respond and develop good habits within your team. ## Crisis Simulations Conducting discussion-based tabletop exercises with your team is an ideal starting point. However, leveraging functional exercises to simulate your level of maturity with crisis coordination, and command and control is also important. Running a crisis simulation using PagerDuty is as simple as triggering an alert on your crisis service—randomly if you really want to simulate real life. You would then follow your typical process of getting the right people on a conference call or instant messaging channel through an integration and running through a scenario with your corresponding playbook. The PagerDuty platform will automatically track the length of the exercise and record any notes or status changes in the timeline which you can then use in your [postmortem](/ops-guides/postmortem-best-practices/what-is-a-postmortem) (i.e, after action report or hotwash) and in developing further tabletops or simulations. A biannual cadence for crisis simulations provides sufficient time for preparation and to review the findings in the postmortem. --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/reading # Reading A curated list of books, talks, and official resources on incident response and crisis management, recommended as further study for this guide. This is a collection of additional reading on the topic of incident response that we've found useful. ## Books * [Incident Management for Operations](https://learning.oreilly.com/library/view/~/9781491917619/) (Rob Schnepp, Ron Vidal, Chris Hawley) * [Incident Response](https://learning.oreilly.com/library/view/~/0596001304/) (Kenneth R. van Wyk, Richard Forno) * [The Checklist Manifesto](http://atulgawande.com/book/the-checklist-manifesto/) (Atul Gawande) * [The Field Guide to Understanding Human Error](https://www.amazon.com/Field-Guide-Understanding-Human-Error/dp/0754648265) (Sidney Dekker) * [Normal Accidents: Living with High-Risk Technologies](https://www.amazon.com/Normal-Accidents-Living-High-Risk-Technologies/dp/0691004129) (Charles Perrow) * [Site Reliability Engineering](https://sre.google/sre-book/table-of-contents/) (Google) * [IT Disaster Response: Lessons Learned in the Field](https://www.amazon.com/Disaster-Response-Lessons-Learned-Field/dp/1484221834) (Greg D. Moore) ## Documents * [Debriefing Facilitation Guide](https://extfiles.etsy.com/DebriefingFacilitationGuide.pdf) (Etsy) ## Talks * [Every Minute Counts: Leading Heroku's Incident Response](https://www.heavybit.com/library/video/every-minute-counts-coordinating-herokus-incident-response/) (Blake Gentry) * [Three Analytical Traps in Accident Investigation](https://www.youtube.com/watch?v=TqaFT-0cY7U) (Dr. Johan Bergström) ## Official Resources * [US National Incident Management System (NIMS)](https://www.fema.gov/national-incident-management-system) (FEMA) * [UK Government Fire and Rescue Manual - Incident Command](https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/7643/incidentcommand.pdf) (UK.GOV) * [New Zealand Coordinated Incident Management System (CIMS)](https://www.civildefence.govt.nz/resources/coordinated-incident-management-system-cims-third-edition/) (NZCDEM) ## Other Useful Resources * [Informed's NIMS Incident Command System Field Guide](https://www.amazon.com/gp/product/1284038408) (Michael J. Ward) * [Linkedin's School Of SRE](https://linkedin.github.io/school-of-sre/) (LinkedIn) --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/scribe # Scribe So you want to be a scribe? You've come to the right place! You don't need to be a senior team member to become a Deputy or Scribe, anyone can do it providing So you want to be a Scribe? You've come to the right place! You don't need to be a senior team member to become a Deputy or Scribe, anyone can do it providing you have the requisite knowledge! ## Purpose The purpose of the Scribe is to maintain a timeline of key events during an incident. Documenting actions, and keeping track of any follow-up items that will need to be addressed. It's important for the rest of the command staff to be able to focus on the problem at hand, rather than worrying about documenting the steps. Your job as Scribe is to listen to the call and to watch the incident Slack room, keeping track of context and actions that need to be performed, documenting these in Slack as you go. **You should not be performing any remediations, checking graphs, or investigating logs.** Those tasks will be delegated to the subject matter experts (SME's) by the Incident Commander. ## Prerequisites Before you can be a Scribe, it is expected that you meet the following criteria. Don't worry if you don't meet them all yet, you can still continue with training! * Excellent verbal and written **communication skills**. ## Responsibilities Read up on our [Different Roles for Incidents](/ops-guides/incident-response-guide/different-roles) to see what is expected from a Scribe, as well as what we expect from the other roles you'll be interacting with. ## Training Process There is no formal training process for this role, reading this page should be sufficient for most tasks. Here's a list of things you can do to train though, * Read the rest of this page, particularly the sections below. * Participate in [Failure Friday](https://www.youtube.com/watch?v=XKl-7hB3paY) (FF). * Shadow a FF to see how it's run. * Be the Scribe for multiple FF's. ## Scribing Scribing is more art than science. The objective is to keep an accurate record of important events that occurred on the call, so that we can look back at the timeline to see what happened. But what exactly is important? There's no overwhelming answer, and it really comes down the judgement and experience. But here are some general things you most definitely want to capture as Scribe. * The result of any polling decisions. * This is not "9 people voted yay, 3 voted nay". * It is "Polled for if we should do rolling restart. <USER_A> is proceeding with restart." * Any follow-up items that are called out as "We should do this..", "Why didn't this?..", etc. * This is not "Why isn't the Support representative on the call?" * This is "TODO: Why didn't we get paged for this earlier?" ## Incident Call Procedures and Lingo The [Steps for Scribe](/ops-guides/incident-response-guide/during-an-incident#steps-for-scribe) provide a detailed description of what you should be doing during an incident. Here are some examples of phrases and patterns you should use during incident calls. ### Status Stalking At the start of any major incident call, you should start our status stalking bot, so that it will post to the room an update automatically. > !status stalk This will provide the update and allow the IC to see the status without having to keep asking. ### Note Important Actions During a call, you will hear lots of discussion happening, you should not be documenting all of this in the chat room. You only want to document things which will be important for the final timeline. It's not always obvious what this might be, and it's usually a matter of judgement. You generally want to note any actions the IC has asked someone to perform, along with the result of any polling decisions. > Polled for decision on whether to perform rolling restart. We are proceeding with restart. [USER_A] to execute. Some actions might seem important at the time, but end up not being. That's OK. It's better to have more info than not enough, but don't go overboard. ### Note Follow-up Actions Sometimes during the call, someone will either mention something we "should fix", or the IC will specifically ask you to note a followup item. You can do this in Slack by simply prefixing with "TODO", this will make it easier to search for later. > TODO: Why did we not get paged for the fall in traffic on [X] cluster? The postmortem owner will find these after and raise tasks for them. ### End of Call Notification When the IC ends the call, you should post a message into Slack to let everyone know the call is over, and that they should continue discussion elsewhere. > Call is over, thanks everyone. Follow up in Slack. Don't forget to also stop the status stalking. > !status unstalk --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/security-incident # Security Incident Checklist of actions for responding to a security incident at PagerDuty.
Last Reviewed: YYYY-MM-DD Last Tested: YYYY-MM-DD
> **Incident Commander Required:** As with all major incidents at PagerDuty, security incidents will also involve an Incident Commander who will delegate the tasks to relevant responders. Tasks may be performed in parallel as assigned by the IC. Page one at the earliest possible opportunity `!ic page`. > **Not Sure it's a Security Incident?:** Trigger the process anyway. It's better to be safe than sorry. The Incident Commander will make a determination on if response is needed. ## Checklist Details for each of these items are available in the next section. 1. Stop the attack in progress. 1. Cut off the attack vector. 1. Assemble the response team. 1. Isolate affected instances. 1. Identify timeline of attack. 1. Identify compromised data. 1. Assess risk to other systems. 1. Assess risk of re-attack. 1. Apply additional mitigations, additions to monitoring, etc. 1. Forensic analysis of compromised systems. 1. Internal communication. 1. Involve law enforcement. 1. Reach out to external parties that may have been used as vector for attack. 1. External communication. --- ## Attack Mitigation Stop the attack as quickly as you can, via any means necessary. Shut down servers, network isolate them, turn off a data center if you have to. Some common things to try, * Shutdown the instance from the provider console (do not delete or terminate if you can help it, as we'll need to do forensics). * If you happen to be logged into the box you can try to, * Reinstate our default iptables rules to restrict traffic. * `kill -9` any active session you think is an attacker. * Change root password and update /etc/shadow to lock out all other users. * `sudo shutdown now` ## Cut Off Attack Vector Identify the likely attack vectors and path/fix them so they cannot be re-exploited immediately after stopping the attack. * If you suspect a third-party provider is compromised, delete all accounts except your own (and those of others who are physically present) and immediately rotate your password and MFA tokens. * If you suspect a service application was an attack vector, disable any relevant code paths, or shut down the service entirely. ## Assemble Response Team Identify the key responders for the security incident and keep them all in the loop. Set up a secure method of communicating all information associated with the incident. Details on the incident (or even the fact that an incident has occurred) should be kept private to the responders until you are confident the attack is not being triggered internally. * Page an Incident Commander if not already done so. They will also appoint the usual incident command roles. The incident command team will be responsible for keeping documentation of actions taken, and for notifying internal stakeholders as appropriate. * Give the project an innocuous codename that can be used for chats/documents so if anyone overhears they don't realize it's a security incident. (e.g. sapphire-unicorn). * Start the voice call if not already in progress. * Setup chat room using the codename of the incident. * Invite all responders to the voice call and chat room. 1. The **security team should always be included**. 1. A representative for any affected services should be included. 1. Executive stakeholders and legal counsel should be invited at earliest possible opportunity, but prioritize operational responders first. * Do not communicate with anyone not on the response team about the incident until forensics have been performed. The attack could be happening internally. * Prefix all emails, and chat topics with "Attorney Work Project". ## Isolate Affected Instances Any instances which were affected by the attack should be immediately isolated from any other instances. As soon as possible, an image of the system should be taken and put into a read-only cold storage for later forensic analysis. * Blacklist the IP addresses for any affected instances from all other hosts. * Turn off and shutdown the instances immediately if you didn't do that to stop the attack. * Take a disk image for any disks attached to the instances, and ship them to an off-site cold storage location. You should make sure these images are read-only and cannot be tampered with. ## Identify Timeline of Attack Work with all tools at your disposal to identify the timeline of the attack, along with exactly what the attacker did. * Any reconnaissance the attacker performed on the system before the attack started. * When the attacker gained access to the system. * What actions the attacker performed on the system, and when. * Identify how long the attacker had access to the system before they were detected, and before they were kicked out. * Identify any queries the attacker ran on databases. * Try to identify if the attacker still has access to the system via another back door. Monitor logs for unusual activity, etc. ## Compromised Data Using forensic analysis of log files, time-series graphs, and any other information/tools at your disposal, attempt to identify what information was compromised (if any), * Identify any data that was compromised during the attack. * Was any data exfiltrated from a database? * What keys were on the system that are now considered compromised? * Was the attacker able to identify other components of the system (map out the network, etc)? * Find exactly what customer data has been compromised, if any. ## Assess Risk Based on the data that was compromised, assess the risk to other systems. * Does the attacker have enough information to find another way in? * Were any passwords or keys stored on the host? If so, they should be considered compromised regardless of how they were stored. * Any user accounts that were used in the initial attack should rotate all of their keys and passwords on every other system they have an account. ## Apply Additional Mitigations Start applying mitigations to other parts of your system. * Rotate any compromised data. * Identify any new alerting which is needed to notify of a similar breach. * Block any IP addresses associated with the attack. * Identify any keys/credentials that are compromised and revoke their access immediately. ## Forensic Analysis Once you are confident the systems are secured, and enough monitoring is in place to detect another attack, you can move onto the forensic analysis stage. * Take any read-only images you created, any access logs you have, and comb through them for more information about the attack. * Identify exactly what happened, how it happened, and how to prevent it in future. * Keep track of all IP addresses involved in the attack. * Monitor logs for any attempt to regain access to the system by the attacker. ## Internal Communication **Delegate to:** VP or Director of Engineering Communicate internally only once you are confident (via forensic analysis) that the attack was not sourced internally. * Don't go into too much detail. * Overview the timeline. * Discuss mitigation steps taken. * Follow up with more information once it is known. ## Liaise With Law Enforcement / External Actors **Delegate to:** VP or Director of Engineering Work with law enforcement to identify the source of the attack, letting any system owners know that systems under their control may be compromised, etc. * Contact local law enforcement. * Contact the FBI. * Contact operators for any systems used in the attack, their systems may also have been compromised. * Contact security companies to help in assessing risk and any PR next steps. * Contact your cyber insurance provider. ## External Communication **Delegate to:** Marketing Team Once you have validated all of the information you have is accurate, have a timeline of events, and know exactly what information was compromised, how it was compromised, and sure that it won't happen again. Only then should you prepare and release a public statement to customers informing them of the compromised information and any steps they need to take. * Include the date in the title of any announcement so that it's never confused for a potential new breach. * Don't say "We take security very seriously." It makes everyone cringe when they read it. * Be honest, accept responsibility, and present the facts, along with exactly how we plan to prevent such things in future. * Be as detailed as possible with the timeline. * Be as detailed as possible in what information was compromised and how it affects customers. If we were storing something we shouldn't have been, be honest about it. It'll come out later and it'll be much worse. * Don't name and shame any external parties that might have caused the compromise. It's bad form. (Unless they've already publicly disclosed, in which case we can link to their disclosure). * Release the external communication as soon as possible, preferably within a few days of the compromise. The longer you wait, the worse it will be. * If possible, get in touch with customers' internal security teams before the general public notice is sent. --- ## Communicating During an Incident * Prefer voice call and Slack over any other methods. * Avoid email, but if you absolutely need to for some reason, * Subject of emails should be "Attorney Work Project" and nothing else. * If the email chain has **ANY** contacts **not with the @pagerduty.com domain**, make sure your emails are encrypted. * Do not use SMS to communicate about the incident. * The only exception is to tell someone to move to a more secure channel. e.g. "Please join Slack ASAP." * Do not disseminate anything about the incident to those outside the response team until you have approval to do so. --- ## Additional Reading * [Computer Security Incident Handling Guide](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-61r2.pdf) (NIST) * [Incident Handler's Handbook](https://www.sans.org/reading-room/whitepapers/incident/incident-handlers-handbook-33901) (SANS) * [Responding to IT Security Incidents](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc700825(v=technet.10)) (Microsoft) * [Defining Incident Management Processes for CSIRTs: A Work in Progress](https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=7153) (CMU) * [Creating and Managing Computer Security Incident Handling Teams (CSIRTS)](https://www.first.org/conference/2008/papers/killcrece-georgia-slides.pdf) (CERT) --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/severity-levels # Severity Levels Incidents are typically classified by severity or priority. At PagerDuty we use 'SEV' levels, with lower numbered severities being more urgent. Operational The first step in any incident response process is to determine what actually [constitutes an incident](/ops-guides/incident-response-guide/what-is-an-incident). Incidents can then be classified by severity, usually done by using "SEV" definitions, with the lower numbered severities being more urgent. Operational issues can be classified at one of these severity levels, and in general you are able to take more risky moves to resolve a higher severity issue. Anything above a SEV-3 is automatically considered a "major incident" and gets a more intensive response than a normal incident. > **Always Assume The Worst:** If you are unsure which level an incident is (e.g. not sure if SEV-2 or SEV-1), **treat it as the higher one**. During an incident is not the time to discuss or litigate severities, just assume the highest and review during a postmortem. > **Can a SEV-3 be a major incident?:** All SEV-2's are major incidents, but not all major incidents need to be SEV-2's. If you require coordinated response, even for lower severity issues, trigger our incident response process. The Incident Commander can make a determination on whether full incident response is necessary.
Severity Description Typical Response
SEV-1

Critical issue that warrants public notification and liaison with executive teams.

  • The system is in a critical state and is actively impacting a large number of customers.
  • Functionality has been severely impaired for a long time, breaking SLA.
  • Customer-data-exposing security vulnerability has come to our attention.

Major incident response.

  • Page an IC in Slack !ic page.
  • See During an Incident.
  • Notify internal stakeholders.
  • Public notification.
SEV-2

Critical system issue actively impacting many customers' ability to use the product.

  • Notification pipeline is severely impaired.
  • Incident response functionality (ack, resolve, etc) is severely impaired.
  • Web app is unavailable or experiencing severe performance degradation for most/all users.
  • Monitoring of PagerDuty systems for major incident conditions is impaired.
  • Any other event to which a PagerDuty employee deems necessary of an incident response.

Major incident response.

Anything above this line is considered a "Major Incident". Our incident response process should be triggered for any major incidents.
SEV-3

Stability or minor customer-impacting issues that require immediate attention from service owners.

  • Partial loss of functionality, not affecting majority of customers.
  • Something that has the likelihood of becoming a SEV-2 if nothing is done.
  • No redundancy in a service (failure of 1 more node will cause outage).

High-Urgency page to service team.

  • Work on issues as your top priority.
  • Liaise with engineers of affected systems to identify cause.
  • If related to recent deployment, rollback.
  • Monitor status and notice if/when it escalates.
  • Mention on Slack if you think it has the potential to escalate.
  • Trigger incident response if necessary (!ic page).
SEV-4

Minor issues requiring action, but not affecting customer ability to use the product.

  • Performance issues (delays, etc).
  • Individual host failure (i.e. one node out of a cluster).
  • Delayed job failure (not impacting event & notification pipeline).
  • Cron failure (not impacting event & notification pipeline).

Low-Urgency page to service team.

  • Work on the issue as your first priority (above "normal" tasks).
  • Monitor status and notice if/when it escalates.
SEV-5

Cosmetic issues or bugs, not affecting customer ability to use the product.

  • Bugs not impacting the immediate ability to use the system.

JIRA ticket.

  • Create a JIRA ticket and assign to owner of affected system.
> **Be Specific:** These severity descriptions have been changed from the PagerDuty internal definitions to be more generic. For your own documentation, you are encouraged to make your definitions very specific, usually referring to a % of users/accounts affected. You will usually want your severity definitions to be metric driven. --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/subject-matter-expert # Subject Matter Expert If you are on-call for any team at PagerDuty, you may be paged for a major incident and will be expected to respond as a subject matter expert (SME) for your If you are on-call for any team at PagerDuty, you may be paged for a major incident and will be expected to respond as a subject matter expert (SME) for your service. This page details everything you need to know in order to be prepared for that responsibility. If you are interested in becoming an Incident Commander, take a look at the [Incident Commander Training page](/ops-guides/incident-response-guide/incident-commander). ## On-Call Expectations If you are on-call for your team, there are certain expectations of you as that on-call. This applies to both the primary and secondary on-calls. Getting paged about a SEV-3 or SEV-4 in your system comes with different expectations than getting paged with a major SEV-2. ### Before Going On-Call 1. Be prepared, by having already familiarized yourself with our incident response policies and procedures. In particular, 1. [Different Roles for Incidents](/ops-guides/incident-response-guide/different-roles) - You will be acting as a "Resolver" or "SME". But you should familiarize yourself with the other roles and what they will be doing. 1. [Incident Call Etiquette](/ops-guides/incident-response-guide/call-etiquette) - How to behave during an incident call. 1. [During an Incident](/ops-guides/incident-response-guide/during-an-incident) - What to do during an incident. You are specifically interested in the "Resolver" steps, but you should familiarize yourself with the entire document. 1. [Glossary](/ops-guides/incident-response-guide/glossary) - Familiarize yourself with the terminology that may be used during the call. 1. Make sure you have set up your alerting methods, and that PagerDuty can [bypass your "Do Not Disturb" settings](/incident-management/notifications/notification-phone-numbers). 1. Check you can join the incident call. You may need to install a browser plugin. You don't want to be doing that the first time you get paged. 1. Be aware of your upcoming on-call time and arrange swaps around travel, vacations, appointments, etc. 1. If you are an Incident Commander, make sure you are not on-call for your team at the same time as being on-call as Incident Commander. ### During On-Call Period 1. Have your laptop and Internet with you at all times during your on-call period (office, home, a MiFi, a phone with a tethering plan, etc). 1. If you have important appointments, you need to get someone else on your team to cover that time slot in advance. 1. When you receive an alert for a major incident, you are expected to join the incident call and Slack as quickly as possible (within minutes). 1. You will be asked questions or given actions by the Incident Commander. Answer questions concisely, and follow all actions given (even if you disagree with them). ## Response Mobilization When an incident occurs, you must be mobilized or assigned to become part of the incident response. In other words, until you are mobilized to the incident via a page or being directly asked by someone else on the incident, you remain in your everyday role. After being mobilized, your first task is to check in and receive an assignment. While it's tempting to see an incident happening and want to jump in and help, when resources show up that have not been requested, the management of the incident can be compromised. ## "Never Hesitate to Escalate" If you're not sure about something, it is perfectly acceptable to bring in other SMEs from your team that you believe know a given system better than you. Don't let your ego keep you from bringing in additional help. Our motto is "Never hesitate to escalate", you will never be looked down upon for escalating something because you didn't know how to handle it. ## Blameless There will be incidents. Some will be caused by you, some will be caused by others... some will just happen. Our entire incident response process is completely blameless. Blaming people is counter productive and just distracts from the problem at hand. No matter how an incident started, they all need to get solved as quickly as possible. ## Wartime vs Peacetime Behavior during a major incident is very different to any other alert you may have received in the past. We call a major incident "wartime", and make a distinction between that and normal everyday operations ("peacetime"). ### Peacetime The organizational structure is generally based on seniority. The more senior members of a team will lead discussions, and managers or team leads will have the final say. Decisions are made after careful consideration of all options, and to minimize potential risk to customers. ### Wartime Wartime is different, and you will notice on our major incident calls that there's a different organizational structure. * The Incident Commander is in charge. No matter their rank during peacetime, they are now the highest ranked individual on the call, higher than the CEO. * Primary responders (folks acting as primary on-call for a team/service) are the highest ranked individuals for that service. * Decisions will be made by the IC after consideration of the information presented. Once that decision is made, it is final. * Riskier decisions can be made by the IC than would normally be considered during peacetime. * For example, the IC may decide to drop events for a particular customer in order to maintain the integrity of the system for everyone else. * The IC may go against a consensus decision. If a poll is done, and 9/10 people agree but 1 disagrees. The IC may choose the disagreement option despite a majority vote. * Even if you disagree, the IC's decision is final. During the call is not the time to argue with them. * The IC may use language or behave in a way you find rude. This is wartime, and they need to do whatever it takes to resolve the situation, so sometimes rudeness occurs. This is never anything personal, and something you should be prepared to experience if you've never been in a wartime situation before. * You may be asked to leave the call by the IC, or you may even be forceable kicked off a call. It is at the IC's discretion to do this if they feel you are not providing useful input. Again, this is nothing personal and you should remember that wartime is different than peacetime. --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/terminology # Terminology If crisis response is new to you or your organization, these terms will help you establish a baseline for understanding. The following list of terms will help you navigate the Crisis Response section of this document. You'll find some terms mirror those used in incident response, while some will have slightly different definitions. - **Crisis** - an extraordinary event or situation that serves as an existential threat to people, the operational environment, assets or reputation requiring a strategic, adaptive and timely organizational response - **Crisis Management** - coordinated activities to lead, direct and control an organization with regards to its response to a crisis - **Incident** - a potentially costly yet generally foreseeable event, e.g., availability, performance degradation, market volatility, increased competition, etc., that disrupts normal business processes - **Emergent Issue** - a situational problem that does not present a significant impact to strategic objectives, reputation or viability of the organization but may require comment or organized activity to avert an incident or crisis - **Emergency** - a sudden, short-lived threat generally involving people or physical assets that requires immediate action or assistance to mitigate - **Incident Command System (ICS)** - a standardized emergency management construct created by the U.S. Federal Emergency Management Agency (FEMA) to provide an integrated organizational structure that reflects the complexity and demands of single or multiple incidents - **Area Command** - an organizational structure used by the Federal Emergency Management Agency (FEMA) to oversee the management of multiple incidents or oversee the management of a very large or evolving situation with multiple ICS organizations - **Incident Commander (IC)** - the individual responsible for incident management having overall authority and responsibility for conducting and managing response operations - **Executive Crisis Leadership Team** - a group of Executives who make enterprise-wide strategic decisions for the business during a crisis situation and pre-crisis - **Crisis Management Plan** - a document defining the personnel, procedures and resources needed to manage a crisis from beginning to end - **Crisis Team Leader** - the equivalent of an Incident Commander for a crisis situation based on their functional area of expertise or charge - **Crisis Response** - the immediate actions taken in response to a crisis situation to contain it and the steps taken pre-crisis to develop the capabilities and readiness to do so - **Crisis Response Management** - the triage and initial treatment stages of a crisis situation and the effective activations to support the complete crisis management lifecycle - **Incident Response** - the process for addressing and solving an incident of varying severity in order to limit damage and reduce recovery time and costs - **Emergency Response** - the process of responding to a range of life-safety events and threats to the environment to mitigate damage and loss --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/training-overview # Training Overview Learning about the PagerDuty major incident response process is an important part of being an effective on-call engineer at PagerDuty. This section goes over Learning about the PagerDuty major incident response process is an important part of being an effective on-call engineer at PagerDuty. This section goes over our training material for the various roles that are involved in our incident response, along with some additional information and training material from government agencies. ## Training Guides Our training guides are split up by role, however you are encouraged to read through the training guides even for roles you don't belong to, as it can give you some good insight into how those people will be behaving during major incidents. * [Incident Commander Training](/ops-guides/incident-response-guide/incident-commander) - The "IC" is the person who drives a major incident to resolution. They're the person who will be directing everyone else. * [Deputy Training](/ops-guides/incident-response-guide/deputy) - The Deputy is someone who supports the Incident Commander and can take over for them if necessary. * [Scribe Training](/ops-guides/incident-response-guide/scribe) - This is intended for individuals who will be acting as a Scribe during an incident. * [SME / Resolver Training](/ops-guides/incident-response-guide/subject-matter-expert) - This is relevant to everyone at PagerDuty who are on-call for any team. * [Customer Liaison Training](/ops-guides/incident-response-guide/customer-liaison) - This is for individuals who will be publicly representing us and interacting with customers. * [Internal Liaison Training](/ops-guides/incident-response-guide/internal-liaison) - This is relevant for anyone who might be called upon to work with teams internal during an incident. ## Training Courses We've also published slides and videos of some of our training courses. Originally used internally at PagerDuty to train our staff, we've since adapted them for a wider audience so you can make use of them in your own organizations. * [Incident Response Training Course](/ops-guides/incident-response-guide/incident-response-course) - Introductory course on incident response and the role of the Incident Commander. ## Example Incident This recorded call is a reenactment of an actual major incident that occurred at PagerDuty in January 2017. Some details have been changed in the interest of brevity and privacy, but the incident remains otherwise largely intact. For more details about the recording, you can read the [PagerDuty blog post](https://www.pagerduty.com/blog/incident-response-reenactment/). ## National Incident Management System (NIMS) Our incident response process is loosely based on the [US National Incident Management System (NIMS)](https://www.fema.gov/national-incident-management-system), which is described as, _A systematic, proactive approach to guide departments and agencies at all levels of government, nongovernmental organizations, and the private sector to work together seamlessly and manage incidents involving all threats and hazards—regardless of cause, size, location, or complexity—in order to reduce loss of life, property, and harm to the environment._ While it might not initially seem that this would be applicable to an IT operations environment, we've found that many of the lessons learned from major incidents in these situations can be directly applied to our industry too. The principles are the same and span many different environments. [![NIMS](/images/guides/incident-response-guide/nims_core.webp)](https://www.fema.gov/pdf/emergency/nims/NIMS_core.pdf) [![NIMS Training](/images/guides/incident-response-guide/nims_training.webp)](https://www.fema.gov/pdf/emergency/nims/nims_training_program.pdf) If you want to learn more about NIMS, we recommend the [ICS-100](https://training.fema.gov/is/courseoverview.aspx?code=IS-100.b) and [ICS-700](https://training.fema.gov/is/courseoverview.aspx?code=IS-700.a) online training courses, which go over NIMS and the Incident Command System (You can also take an online examination after training in order to get a certificate from FEMA). There is also a wealth of [additional training material and courses from FEMA](https://training.fema.gov/nims/) on NIMS, which I would encourage you to look at. If you're based in the US and interested in taking a more active incident response role in your community, we recommend investigating your local [CERT programs](https://www.ready.gov/cert) (Community Emergency Response Teams). Many cities offer CERT training, after which you can volunteer as a CERT contributor within your community. Not only is it an opportunity to get real world experience with disaster response, but the skills you learn can be applied to everyday life too. Also take a look at the [Additional Reading](/ops-guides/incident-response-guide/reading) page. ## Incident Response Around the World While NIMS is the US incident response framework, many countries have their own similar frameworks. Some are based on the US system, but many were developed on their own. There's a wealth of additional information to be learned by investigating the methods and frameworks used in countries all over the world. A book called "Comparative Emergency Management: Understanding Disaster Policies, Organizations, and Initiatives from Around the World" compares the systems used by 30 or so different countries, and is an amazing collection of information on emergency management frameworks used around the world. Here are a few of the systems we looked at in more detail in order to adapt and improve our own process at PagerDuty. ### United Kingdom The United Kingdom emergency services use a command hierarchy called [**Gold-Silver-Bronze Command Structure**](https://en.wikipedia.org/wiki/Gold%E2%80%93silver%E2%80%93bronze_command_structure) for their major operations. The framework involves three levels responsible for strategic (gold), tactical (silver), and operational (bronze) command decisions. Here are some useful reading materials if you're interested in learning more: * [UK.GOV - Emergency Response and Recovery](https://www.gov.uk/guidance/emergency-response-and-recovery). * [UK.GOV - Incident Command - 3rd Edition (2008)](https://www.gov.uk/government/publications/fire-and-rescue-manual-volume-1-incident-command). * [UK Home Office - Critical Incident Management](https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/735103/critical-incident-management-v12.0ext.pdf) (PDF). ### New Zealand New Zealand's system is called the [**Coordinated Incident Management System (CIMS)**](https://en.wikipedia.org/wiki/Coordinated_Incident_Management_System) and is based upon the Incident Command System used in the US. One area we particularly liked from CIMS is its focus on common terminology, which helps prevents confusion during an incident and allows for a faster and more effective response. Some terminology has been changed from ICS (e.g. "Control" instead of "Command" to describe the management functions), but should still be familiar. Here are some useful reading materials if you're interested in learning more: * [Ministry of Civil Defence & Emergency Management - New Zealand Coordinated Incident Management System (CIMS)](https://www.civildefence.govt.nz/resources/coordinated-incident-management-system-cims-third-edition/) * [Devereux-Blum Training & Development - Emergency Management Training](https://www.emergencymanagement.co.nz/) ### Australia Australia uses a system called the [**Australasian Inter-Service Incident Management System (AIIMS)**](https://en.wikipedia.org/wiki/Australasian_Inter-Service_Incident_Management_System) which is a derivative of the NIMS framework used in the US. While based on ICS, AIIMS puts a bigger focus on span of control than other frameworks. As with New Zealand's system, there are some differences to the terminology being used (e.g. "Incident Controller" instead of "Incident Commander"), but it should still be familiar to those who know ICS. Here are some useful reading materials if you're interested in learning more: * [Incident Management in Australia Handbook](https://knowledge.aidr.org.au/resources/handbook-14-incident-management-in-australia/) ### Canada Canada uses their own [**Incident Command System**](https://icscanada.ca/wp-content/uploads/2023/11/2021-Part-1-TOX-Tips-Introduction-to-ICS.pdf) (PDF). The standard for which is maintained by a network of organizations called [ICS Canada](https://www.icscanada.ca/). Their website has a collection of information on how you can find local training courses in Canada, depending on your Province. Here are some useful reading materials if you're interested in learning more: * [Canada ICS Forms](https://icscanada.ca/resources/ics-forms/) - Standard ICS forms that you can download and use in your own incidents ([FEMA has the US equivalents](https://training.fema.gov/icsresource/icsforms.aspx) ). --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/what-is-an-incident # What is an Incident? Before defining an incident response process, we should first define what an incident (and a major incident) is, along with how we should trigger the response Before we can define our incident response process, we should first define what an incident (and a major incident) is. ## What is an incident? Any unplanned disruption or degradation of service that is actively affecting customers ability to use PagerDuty. ## What is a major incident? Any incident that requires a coordinated response between multiple teams. ## What is incident response? An organized approach to addressing and managing an incident. The goal isn't just to solve the incident, but to handle the situation in a way that limits damage and reduces recovery time and costs. ## What triggers our incident response process? Our incident response process should be initiated for any major incident. It provides a framework for effectively responding and reaching a fast resolution time. Our incident response process can be triggered one of two ways, either via automated monitoring and alerting, or manually via human action. ### Automated Monitoring Throughout our system, we monitor various metrics to determine if our system is in a state which would require a coordinated human response in order to resolve. To determine which metrics we monitor, and what to monitor them for, we ask ourselves these questions. If the answer to any is "No", then we should trigger our incident response process. 1. Can customers perform all incident response functions provided by PagerDuty, across all platforms? * e.g. Can customers acknowledge, reassign, and resolve incidents via every supported method? 1. Are customers receiving notifications within SLA? ### Human Escalation Automatic monitoring is only part of the process. We may have parts of our functionality which lack the necessary monitoring. It's important to still be able to trigger a coordinated incident response in those cases. For example, if our Support team starts to receive requests that indicate a system issue, they need to have the power to trigger our response. Any PagerDuty employee has the ability to trigger our incident response process at any time. We trigger on any unplanned disruption or degradation of service to which any PagerDuty employee deems necessary of requiring coordinated incident response. > **Is a response required?:** If you are unsure of whether response is required, trigger our incident response process. All you need to do to start the process is page an Incident Commander in Slack with `!ic page`. ## Incident Severity Our [severity definitions](/ops-guides/incident-response-guide/severity-levels) determine how severe we _think_ an incident is based on some predefined guidelines. The intent is to guide responders on the type of response they can provide. For example, the higher the severity, the riskier the decisions you can take to return the system to normal. Severities are useful to quickly determine whether something requires a more complex response, or whether it requires a coordinated response at all. However, they are not a black and white definition of what constitutes a major incident. If something is not covered by our severity definitions - but you think it requires incident response - then it requires incident response. We only need to know one thing: Is this a major incident? The severity level can be determined later and isn't a requirement of triggering our response process. ## Mentality Shift One of the more important concepts of our incident response process is the mentality shift that needs to be made during an incident. We typically call this the "Peacetime vs Wartime" mentality shift. The idea is that the decision making process changes when you are in an incident situation, and you are able to take riskier actions than you would normally consider during day-to-day operations. It can be hard for responders to grasp this concept, and your incident response process can be held up by responders who stick to the peacetime way of thinking to avoid proceeding with a potentially risky action. You can read more about peacetime vs wartime in the [Responder Training Guide](/ops-guides/incident-response-guide/subject-matter-expert#wartime-vs-peacetime). > **Normal vs Emergency:** Some people don't like the "Peacetime vs Wartime" analogy, in which case you can use any other terms you feel appropriate. "Normal vs Emergency" is a common choice, but you could equally use "OK vs Not OK". It's not terribly important what name you give it, the important part is to make the mentality shift. --- URL: https://docs.pagerduty.com/ops-guides/incident-response-guide/whos-oncall # Who's On-Call? Organizational structures vary, but these are general guidelines about the way different functions in a business relate to incident response. Organizational structures vary, but these are general guidelines about the way different functions in a business relate to incident response. Generally speaking, every department should have a primary point of contact, on-call rotation, and clear escalation path. Organizations should always strive to minimize dependencies and empower response teams as much as possible. But, in novel situations, you do not know who you will need to help out. A clear system for recruiting responders from all parts of the business ensures that when the unexpected happens, responders don’t waste time on manual processes or ambiguous points of contact. ## Engineering Engineers are typically the primary responders and [subject matter experts](/ops-guides/incident-response-guide/different-roles) during incident response. Which engineering teams are involved in which responses varies with a company’s operational model. In some organizations, a designated “Operations” or “Site Reliability Engineering” team may have initial responsibility for triage and assessment of new issues. At PagerDuty, the on-call engineer for an affected service has initial triage and assessment responsibility. ## Customer Support / Customer Success Support is the voice of the customer during incident response. A member of the Customer Support team is the default [Customer Liaison](/ops-guides/incident-response-guide/customer-liaison) within the response team, updating customers and stakeholders about incident status through social media, an internal Slack channel, and other channels as needed. They may also serve as an internal liaison to keep stakeholders within the company up to date. ## Marketing Marketing or Public Relations is the primary response team for any public relations Incident. Additionally, Marketing or Public Relations should be engaged in any incident of scope or severity such that the company’s brand or image is at risk, or where public updates need to be sent through customer communication channels such as mass email or the company blog. ## Product Management and Design Product Managers and Designers are often on the hook for helping response teams make decisions when product functionality is impacted across multiple services or products. For example, if the response team has to decide which service to bring back up first, a Product Manager can help decide which one is more customer impacting. Product will also be involved in the [postmortem process](/ops-guides/incident-response-guide/postmortem-process), for both scheduling follow-up action against other work, as well as advising on any required product changes due to the issue. ## Executive Team Clear processes for updating the executive team during a major incident response helps ensure organizational leadership has the context and information they need and prevents [executive swoops](/ops-guides/incident-response-guide/glossary#executive-swoop). Additionally, while the Incident Commander has final authority during response, occasionally a major incident may require action at the highest levels of a company. For example, a senior executive may want to reach out to an impacted customer or partner to manage their relationship and help assure them the issue is getting the attention it needs. ## Sales Sales are generally stakeholders during incident response. Salespeople should be notified when there is any impact to the product that may affect demos or customer conversations, and account owners should understand any potential impact to their accounts. ## Human Resources (HR) HR is generally involved in any response to incidents affecting the safety or health of employees. Additionally, during a security incident, the security team may need to coordinate with HR both for management of an internal attacker as well as protection of any affected employees. ## Finance Finance is most often a stakeholder during incident response, and should be kept up to date of any impacts to the platform that may affect billing, accounting, or end-of-month/quarter activities. However, finance should also have a clear on-call rotation and escalation path as there may be components of incident response that require third-party account management or other related actions. > **Consider Your Entire Organization:** There may be other parts of your organization that need to be part of incident response, either as responders or stakeholders. It is important to identify the different areas of your business and think through situations in which they may need to be involved, as well as ensure that anyone on-call has proper incident response training and understands their responsibilities. --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide # Operational Reviews Guide Operational reviews are the practice of regularly gathering metrics with your teams, in a cohesive way across your organization, to drive positive business ![Operational Reviews](/images/guides/operational-reviews-guide/OpsReviews-Title.webp) Operational reviews are the practice of regularly gathering metrics with your teams, in a cohesive way across your organization, to drive positive business outcomes. When transforming digital practices, many organizations struggle to quantify and measure their progress in meaningful ways. By gathering and learning from metrics on a regular cadence at every organizational level—practitioner, management, and executive—teams can make better data-driven decisions around improving work in ways that align daily practices with long-term business results. This guide shows you how to build that practice at each organizational level. ## Who Is This For? This guide is for digital business leaders who want to create a cohesive strategy around capturing metrics that both quantify and drive organizational change. If you’re driving the adoption of DevOps principles, guiding a digital transformation, or driving greater operational maturity—as a team manager, department/division leader, or an executive—then these docs are for you. Anyone who is part of a technical team that manages real-time operations (for example, a digital service that may experience [unplanned incidents](/ops-guides/incident-response-guide)) will also find this documentation useful, including software [engineers who go on call](/ops-guides/service-ownership), technical program managers, [agile coaches](/ops-guides/retrospectives), or anyone else whose job involves leading change and implementing effective processes. Ultimately, we encourage you to share this documentation with all of your teams rather than siloing this information or letting it live solely in the realm of management. Driving organizational change requires transparency, autonomy, accountability, and—above all—knowledge-sharing. ## What Is Covered? ### What Are Operational Reviews? Operational reviews are the practice of regularly gathering metrics with your teams, in a cohesive way across your organization, to drive positive business outcomes. When transforming digital practices, many organizations struggle to quantify and measure their progress in meaningful ways. By gathering and learning from metrics on a regular basis at every organizational level—practitioner, management, and executive—teams can make better data-driven decisions around improving work in ways that align daily practices with long-term business results. ### On-Call Review At the practitioner level, this review happens directly with responders that run your real-time operations and helps you catch any problems before they become trends or contribute to significant negative impact. * [Cadence](/reviews/oncall/#cadence) * [Scope](/reviews/oncall/#scope) * [Meeting owner and attendees](/reviews/oncall/#meeting-owner-attendees) * [Metrics](/reviews/oncall/#metrics) * [Conducting the review](/reviews/oncall/#conducting-the-review) * [Taking action](/reviews/oncall/#taking-action) * [Notes and considerations](/reviews/oncall/#final-notes-considerations) ### Service Review At the department or division level, these reviews happen with management and they provide an opportunity to spot trends and take any necessary corrective actions before negative impacts become broader and potentially more damaging. * [Cadence](/reviews/service/#cadence) * [Scope](/reviews/service/#scope) * [Meeting owner and attendees](/reviews/service/#meeting-owner-attendees) * [Metrics](/reviews/service/#metrics) * [Conducting the review](/reviews/service/#conducting-the-review) * [Taking action](/reviews/service/#taking-action) * [Notes and considerations](/reviews/service/#final-notes-considerations) ### Business Review At the leadership level, this review helps executives identify the results of organizational transformation efforts. Typically a component of quarterly business reviews, it serves to create alignment between technical teams and leadership by highlighting investments or initiatives that are needed to help achieve desired business outcomes. * [Cadence](/reviews/business/#cadence) * [Scope](/reviews/business/#scope) * [Meeting owner and attendees](/reviews/business/#meeting-owner-attendees) * [Metrics](/reviews/business/#metrics) * [Conducting the review](/reviews/business/#conducting-the-review) * [Taking action](/reviews/business/#taking-action) * [Notes and considerations](/reviews/business/#final-notes-considerations) ### Definitions A [glossary of terms](/definitions) used throughout this guide. ### Next Steps Although the above practices are effective on any platform, it can help to see how these concepts are applied in practice. This section shows how [PagerDuty](https://pagerduty.com) can be used to practice the steps recommended in this guide. ### Additional Resources Links to [additional reading](/resources) to help you get started with operational reviews. ## License This documentation is provided under the Apache License 2.0. In plain English, that means you can use and modify this documentation and use it both commercially and for private use. However, you must include any original copyright notices and the original LICENSE file. Whether you are a PagerDuty customer or not, we want you to have the ability to use this documentation internally at your own company. You can view the source code for all of [this documentation](https://github.com/PagerDuty/operational-review-docs) on our [GitHub account](https://github.com/PagerDuty/); feel free to fork the repository and use it as a base for your own internal documentation. --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide/additional-resources # Additional Resources Further reading on operational health reviews, blameless postmortems, and full-service ownership from PagerDuty and Google SRE. ![Going Beyond](/images/guides/operational-reviews-guide/OpsReviews-Resources.webp) ## Further Reading ### Operational Guides - [Incident Response Process](/ops-guides/incident-response-guide) (PagerDuty) - [Blameless Postmortem Guide](/ops-guides/postmortem-best-practices) (PagerDuty) - [Full-Service Ownership Guide](/ops-guides/service-ownership) (PagerDuty) - [Retrospectives Guide](/ops-guides/retrospectives) (PagerDuty) ### Technical Resources - [Digital Operations Maturity Model](/incident-management/analytics/operational-maturity) (PagerDuty) - [Deep Dive on Operational Health](https://www.pagerduty.com/resources/digital-operations/webinar/deep-dive-operational-health/) webinar (PagerDuty) - [Service Level Objectives](https://landing.google.com/sre/sre-book/chapters/service-level-objectives/) (Google SRE Book) --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide/business-review # Business Review Once your organization is consistently conducting On-Call Reviews and Service Reviews, that data can be used to conduct Business Reviews at the senior ![Business Review](/images/guides/operational-reviews-guide/OpsReviews-Business.webp) Once your organization is consistently conducting On-Call Reviews and Service Reviews, that data can be used to conduct Business Reviews at the senior leadership level. For an organization to navigate a digital transformation initiative successfully, it’s necessary to examine if current investments are paying their desired dividends. The purpose of this review is to **understand the connection between real-time operations and business outcomes**. The meeting seeks alignment across technical and business leadership on goals and expected outcomes. Initiatives and investments can then be adjusted to achieve those goals. ## Cadence Even the most nimble organization with highly autonomous teams needs sufficient time to show measurable results when implementing change. Business Reviews should occur on a quarterly basis. Most organizations already do this in the form of Quarterly Business Reviews. This review should be one component of that occasion. The best time to run this review is approximately 2-4 weeks after the end of the quarter. That allows enough time to assemble the data after quarter-end, but is also soon enough that the information is still fresh and relevant. ## Scope While the On-Call and Service Reviews had specific scope to certain teams, services, and departments, the Business Review has a simple scope: the entire digital business. This means every team, every technical service, and every business service. This review is an opportunity to create full alignment around a company’s business goals. This review should cover all operations since the last Business Review, ideally the last 3 months. It requires a significant investment of time and focus. For many organizations, a half-day may be required. For the largest organizations, a full day or more may be required while smaller organizations may find that a few hours will suffice. ## Meeting Owner and Attendees An effective Business Review focuses on impact to the business and investment into better future business outcomes, from a technical perspective. We recommend that this review be sponsored by the CIO, CTO, or the most senior technology leader within the organization. The meeting should be owned and run by this person, but they will also need the organizational and administrative support of many others, including department heads, program managers, analysts, and executive assistants, to ensure the meeting is effective. The review meeting can be quite large. It’s not uncommon for this meeting to have one to two dozen participants at many companies. All department or divisional leaders across Engineering, IT, and Operations (such as most Directors and Vice Presidents) should be attending. Additional attendees often include the CISO, the CEO, and Product Management leadership. For companies with technology products at their core or for smaller organizations, it is common for non-technical executives like the CEO, COO, and CFO to attend. In larger organizations and/or those that are less technologically centered, attendance from non–technical executives is less common. ## Metrics The metrics that drive this review are focused on impact to the business, which is defined as the impact to your people (on-call responders), your business costs in time and dollars, and the impact to your customers and top-line success measures. The recommended metrics for this review include: * Product availability against SLA (total and by business service) * Time without major incident (total, by business service, and by technical service) * Major incident count (total, by business service, and by technical service) * Major incident duration (total, by business service, and by technical service) * Responder cost in hours (total and by team) * Responder cost in dollars (total and by team) * Unique count or % of customers impacted by incidents (total and for each major incident) * Dollars lost or at risk from incidents (total and for each major incident) * List of all or most-impacting major incidents, with details on: duration, total response hours, total response cost, business service(s) impacted, and customers impacted * The organization's business success metrics, such as performance in terms of revenue, new sales, usage, costs, and any other metric the organization uses to gauge overall business success ## Conducting the Review Although lengthy, the Business Review meeting is a highly focused activity, looking at business impact from real-time operations. Generally speaking, the meeting should follow this type of agenda: 1. Distribute Business Review metric reports to all attendees ahead of time (this provides an opportunity to pre-read and collect any supplemental information that may be helpful). 1. Start meeting by reviewing business success metrics for the organization. Create a shared understanding of how the business did with its key performance indicators for the quarter. 1. Review uptime and availability for the entire product portfolio, as well as each service. 1. Go deeper into uptime and availability by reviewing the data on how many customers were impacted, how sales suffered, and/or the revenue put at risk (for subscription and service businesses). 1. Understand the cost of response: how many total person hours went into responding to a major incident, the cost of that time, and the impact on the business' ability to execute on their planned work and innovation targets. 1. Identify the technical services that had the greatest contribution to underperforming customer availability or cost of response metrics. 1. Starting with the major incidents that had the greatest customer and business impacts, review all or many major incidents from the quarter. Focus on the underlying technical service and its historical stability, contributing factors to the incident, incident duration, resolution workflow, postmortem learnings, and status of postmortem follow-up items. 1. Finally, use the last part of the meeting to review action items suggested throughout the meeting, create new action items, and ensure owners are assigned to each action item. A successful Business Review meeting will allow you to answer most or all of these questions: * Was it a good or bad quarter for our digital business? * What was the performance against stated SLAs and SLOs? What was the time without major incidents across the organization? * How many major incidents did the business experience? Is this figure trending up or down? Which business services suffered the most from incidents? * How many customers were impacted by major incidents (unique count or percent)? * How much revenue was lost or put at risk? * Was customer impact equal across business services or are there specific business services that suffer more than others? * How much does it typically cost the company to resolve a major incident? * What percentage of company time is spent responding to high-urgency incident alerts? * What should be changed across digital operations to ensure that customer and business impact metrics meet company goals for the next quarter? * How should investments and allocations of people, process, and technology be adjusted to meet company business goals? ## Taking Action As with all operational reviews, the appropriate action to take will be highly dependent on what was learned in the Business Review, organizational culture, current focus, and current goals. However, there are a few general tips and common areas of focus for taking action after a Business Review. Two of the most valuable things that the participants of the Business Review can do are to validate the importance of existing initiatives and redirect investments to initiatives that can improve business outcomes. Investment can be made many different ways, but they tend to apply to either people, process, or technology. Examples of investments in people might mean changing their focus or hiring more. Investments in the process might include training or program management. Investments in technology could mean bringing in new tools or finding ways to leverage existing tools for automation. Whatever actions are identified during your Business Reviews, it is important that you align them each with one of the three business impacts: people, business costs, and customer impact. Finally, set goals and define how you’ll measure achievement of those goals. ## Final Notes and Considerations The Business Review is different from the other operational reviews in a notable way: It relies heavily on the concept of [business services](/incident-management/services/business-services) and impact metrics that directly measure the results of incidents and operations on customers and top-line revenues. It may not be possible for your teams to have this data readily available when you first start running Business Reviews. It may also be initially difficult to have impact metrics that are well aligned with business services (your revenue generating or key customer experiences). In practice, only the highest-maturity digital organizations achieve that level of alignment between sales/customer impact and service operations. It may take your organization a bit of time to get to that level. But it is possible and you can do it! Again, if your organization is conducting On-Call Reviews and Service Reviews, there should be few to no surprises in this meeting. One of the goals of running operational reviews at different levels of the organization is to create alignment across all leaders on the impact of operations on business outcomes. Many of the attendees of this review will be leaders of their own monthly service reviews, of which some attendees will be sponsors of their own on-call reviews. --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide/definitions # Definitions This documentation uses terms common in digital businesses, but not always standard across organizations. Definitions are provided below for how they are used ![Definitions](/images/guides/operational-reviews-guide/OpsReviews-Definitions.webp) This documentation uses terms common in digital businesses, but not always standard across organizations. Definitions are provided below for how they are used in this documentation. **Actionable vs. Unactionable Incidents** All incidents are either actionable or unactionable. Actionable incidents are when the triggering conditions have a clear resolution action that can be taken by a responder. Unactionable incidents are informational false alarms: they convey a system state, but there is nothing for a responder to do other than acknowledging they received a notification of that state. **Alert** Alerts are a vehicle for ensuring responders are notified of the existence of an incident. In theory, there is a 1:1 mapping of incidents to alerts. But most often, there can be multiple alerts per incident because the same issue may be detected by multiple sources or if additional responders need to be alerted about the same issue. **Business Service** A business service is a critical or otherwise important logical business function of a digital product. Often, that logical function is carried out by a number of underlying technical services. For example, a logical “fulfillment” business service may be represented by various underlying technical services necessary to complete that action such as a shopping cart service, payment service, inventory service, and so on. Businesses services are defined differently by each digital business and are often aligned with product features or capabilities. **Digital Business** A digital business is any company or organization whose product value is delivered primarily online, often 24×7 and with great simultaneous scale. Some companies are digital businesses in their entirety, like PagerDuty. Other companies may not seem like digital businesses at a glance, but if critical elements of their business rely on software (the cash registers at a restaurant, for example), then they too are digital businesses. **Escalation** An escalation is when the primary on-call does not acknowledge an incident and the alert is escalated to another person. Escalations often happen automatically but can be done manually. **Full-Service Ownership (FSO)** Full-service ownership (FSO) is the philosophy that engineers are responsible for the code and services they create in production. Accountability, reliability, and continuous improvement are the main objectives of full-service ownership. **High-Urgency Incident** Any incident that is urgent in nature so that the on-call responder should be interrupted to address it right away. **Incident** Any unplanned disruption or degradation of service that is actively affecting a customer's ability to use your product(s). Sometimes there isn’t actually a problem, but we still call any event that triggered an alert an incident. Incidents are both conceptual (“something’s wrong”) and discrete objects (“Incident #26534 on Thursday at 5 p.m.”). **Incident Response** [Incident Response](/ops-guides/incident-response-guide) is the approach used to address and manage incidents. The goal isn’t just to solve the incident, but to handle the situation in a way that limits damage and reduces recovery time and costs. **Major Incident** Any incident that requires a coordinated response, often across multiple teams. Major incidents are typically highly noticeable by customers, so fixing the problem is of the highest importance. Often referred to as P1, P2, SEV-1, or SEV-2 inside some organizations. **Mean Time to Acknowledge (MTTA)** The average across all incidents of the time between incident creation and the time when a responder acknowledges that they have seen the alert and will take action. **Mean Time to Resolve (MTTR)** The average across all acknowledged incidents of the time between incident creation and when a responder signifies that the issue has been resolved and effectively closes the incident or otherwise ends incident response. **Monitoring** Any software or hardware tool that can monitor the state of a technical service and alert on potential issues or otherwise push information to an on-call and incident management platform. **On-Call** To go on call means to make oneself available to be notified of any potential software issues and resolve them in real time, at any time during an on-call shift. Engineers usually rotate on-call responsibilities in weeklong shifts where they are available to respond to technical service issues 24×7. **On-Call Load & Pain** When a responder goes on call, any unplanned work and interruptions they receive is collectively defined as the load they experience. Any on-call load over the expected amount is considered on-call pain. **Real-Time Operations** This term encapsulates the way a digital business must operate in real time because their product is available 24×7 and can be used simultaneously by a large number of customers. When incidents occur, service teams must respond quickly—i.e., in real time—because even short technical issues can have prolonged large-scale impact on revenue. **Responder** A responder is any team member that responds to an alert from an on-call and/or incident management platform, and helps resolve issues with technical services. By definition, the person on call is a responder, but anyone called in to help is also a responder. **Service Team** This is a group of people directly responsible for building and/or operating a technical service, sometimes also referred to as a product delivery team. This team not only includes the engineers who code, ship, and operate the service in production, they may also include the team manager, UX Designer, Product Owner, Agile Coach, or other roles necessary to support daily team operations. **Service Level Agreement (SLA)** A service-level agreement is an explicit or implicit contract with your customers that includes consequences of meeting (or missing) the specified targets. The consequences are most easily recognized when they are financial—a rebate or a penalty—but they can take other forms. SLAs are used to communicate service availability expectations externally and are tied to business and product decisions. **Service Level Objective (SLO)** A service-level objective is a service availability or performance target used to set expectations internally. They can be useful for communicating with the business about desired service performance and to temper unrealistic expectations for extraordinarily high availability. Unlike an SLA, SLOs are typically not published to customers and they carry no customer consequences when unmet. **Technical Service** A technical service is a unique piece of software or other technology capability that serves a specific purpose or set of purposes, and has a specific engineering team that owns the operations of that software. **Time Without High-Urgency Incident** This is the total minutes or percentage of time during a set period when there was no active high-urgency incident. **Time Without Major Incident** This is the total minutes or percentage of time during a set period when there was no active major incident. --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide/introduction # Introduction Fundamentally changing how people work is hard. Metrics are useful to drive desired behaviors, but they can also be easily gamed. Without a comprehensive ![Introduction](/images/guides/operational-reviews-guide/OpsReviews-Intro.webp) > "Tell me how you measure me and I will tell you how I will behave. If you measure me in an illogical way … do not complain about illogical behavior.” -- [Eliyahu Goldratt](https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt) Fundamentally changing how people work is hard. Metrics are useful to drive desired behaviors, but they can also be easily gamed. Without a comprehensive strategy to connect daily work habits to overall business outcomes, most organizations will fail to drive the types of change necessary to survive in today’s competitive marketplace. ## Why Metrics Are Difficult to Get Right Operational maturity doesn’t happen overnight—it takes continued commitment, focus, learning, and practice. According to IDC, on average, 3.7% of an enterprise organization’s revenue is spent on digital transformation initiatives[]. The goals of transformation initiatives typically include outcomes like [achieving greater profitability and market share](https://services.google.com/fh/files/misc/state-of-devops-2019.pdf) by becoming a faster, more nimble, and more secure organization that can better serve the needs of demanding customers in today’s competitive marketplace. To achieve that, organizational transformation initiatives typically require very large investments, long-term strategy, and executive support. Creating high-performance teams by adopting modern software delivery and operational practices often requires reorganizing technical teams, training them to work with new technologies that have different workflows, and changing existing processes. Adjusting to these changes can be tough and time consuming as teams figure out how to modernize their practices. At the same time, executive sponsors want to see quantifiable results. That creates pressure on managers to figure out a way to quantify something as intangible as whether a team is improving their technical aptitude. Addressing the need for meaningful quantifiable measures requires a holistic approach to accounting for what an organization intends to accomplish. But without a clear strategy for doing that, it’s easy to focus on individual performance and not see the forest for the trees. A common strategy for managers new to restructuring their teams is to [demonstrate quick wins](/ops-guides/service-ownership/digital-transformation) by measuring the first few high-impact metrics they can identify. For example, when restructuring teams into a [full-service ownership](/ops-guides/service-ownership) model, measuring incident response metrics like Mean-Time-To-Acknowledge (MTTA) and Mean-Time-To-Resolve (MTTR) can quickly demonstrate the value of a new operating model. It’s motivating to get points on the board early in the game —however, by itself, it isn’t the same as having a long-term winning strategy. Though it’s a good strategy for getting started, it would be a misstep to set individual goals around the same types of metrics. For example, a common next step is wanting to set goals around the number of incidents reported in production. Some managers reason that if their teams are indeed improving their technical aptitude and building more stable services, it would follow that there should be fewer incidents in production as a result. Therefore, they will then set goals around reducing the number of overall incidents in production. Not only is the fundamental assumption flawed (technical aptitude and incident frequency aren’t correlated—incidents are accidents, not intentional actions) but the incentives created are inadvertently dangerous. If a team is only measured by the number of incidents reported, they are then incentivized to behave in ways that create a record of fewer incidents. The message to the team is clear: management wants fewer incidents. It doesn’t take an act of malice to then start identifying ways to cleverly reduce that number. Actions like lowering incident reporting thresholds or grouping non-similar incidents could be rewarded by having such a myopic approach to measuring success. The goal was to incentivize creating more stable services. But by solely focusing on the number of incidents, the measure fell short of ensuring the right comprehensive set of behaviors across every team that contributes to running those services in production. A more holistic approach would be to measure and track metrics like the number of incidents, but also set goals around meeting service-level objectives (SLOs)—a combined measure of whether a system is running sufficiently reliably and what design or architectural changes should be made to ensure its continued reliability. Agreeing on SLOs requires organizational alignment between technical and business teams, and it can be difficult to build that alignment without a clear approach. So some teams often will settle for metrics that are more easily measured but ultimately counterproductive. ## Operational Reviews Operational Reviews are a series of regularly scheduled activities that offer Engineering, IT, and Operations leaders the opportunity to understand the impact of their real-time operations on business outcomes. Operational Reviews are metric-driven activities that rely on quantitative data ahead of qualitative data. That data, along with the analysis and discussion among those involved, is meant to highlight the impact of technical service operations on key facets of a digital organization; namely people, costs to the business, and customers. When undergoing digital transformation, one way to ensure that your teams are helping drive positive change is to create a cadence where they review the impact of their operations on business outcomes so they can make data-driven decisions that align all stakeholders on how to invest in the future. Running regular operational reviews allows you to optimize for the health of your people, the costs of running your digital business, and the customer experience. It keeps a pulse on qualitative change through quantitative data. Operational reviews help you track metrics that indicate what’s happening at the technical team level on a daily basis, tie those metrics to the scope and impact they have on the business on a monthly basis, and use that to determine which investments into technical service reliability and process improvements can help the business reach its goals. ## Getting Started The process in this guide is the result of PagerDuty’s work with more than 10,000 customers that represent all different types of digital businesses and demonstrate various levels of real-time operational maturity. Through those relationships and interactions, we learned a few things. First, we learned that the most mature digital organizations run regular operational reviews to align leadership on the right investments to make in technology operations to deliver successful business outcomes. Next, as we practiced this and shared our findings with customers, we were asked for guidance to share what we do and what our most mature customers do. Last, many of our internal projects have shown us there are clear and quantifiable ways to drive the transformation of real-time operations. The documentation that follows in this guide offers a methodology to help you get started in running Operational Reviews for your organization. The method is intended to serve as a starting point that can help many organizations get started in practical ways that not only create visibility for what happens at a team level, but also helps them create impactful operational reviews by understanding what to review, when to review it, who to involve, what data is needed, and even how to run the meetings. > **Info:** Not all of the guidance provided here will be applicable for every organization, and varying levels of real-time operational maturity will impact how hard or easy it is to follow this guide. The intent of this documentation is not to prescribe a one-size-fits-all approach to running operational reviews; rather, it’s to provide a framework for any digital organization to adopt and make their own, and allow them to refine, expand, and improve the review process as the organization's operational maturity increases. Highly mature digital organizations run a variety of reviews suited to the needs of people at each level. Although these reviews are different at every company, there are commonalities that are distilled in this guide. These reviews each align with a specific layer of organizational management, cover an intentional timeframe and scope, and seek to answer a concise set of specific questions. When practiced methodically and in tandem, these reviews work together to create focus and alignment across the organization. The three commonly shared reviews at these organizations are: a [weekly on-call review](/ops-guides/operational-reviews-guide/on-call-review), a [monthly service review](/ops-guides/operational-reviews-guide/service-review), and a [quarterly business review](/ops-guides/operational-reviews-guide/business-review). The timing of these reviews is deliberate and common across organizations. Different impacts are understood in different timeframes. For example, it’s hard to understand the impact of large investments or initiatives until weeks or months have passed. But understanding the impact that an active on-call shift had on your teams requires fresh information and perspective on a weekly time scale. To get started, you should aim to create these three types of reviews at a minimum. > **Tip:** If you come across any words you don’t recognize at any point in our guides, take a look at the [Definitions section](/ops-guides/operational-reviews-guide/definitions). --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide/next-steps # Next Steps Although the above practices are effective regardless of any platform, it can help to see how these concepts are applied in practice. This section shows how ![Using PagerDuty](/images/guides/operational-reviews-guide/OpsReviews-NextSteps.webp) Although the above practices are effective regardless of any platform, it can help to see how these concepts are applied in practice. This section shows how [PagerDuty](https://pagerduty.com) can be used to practice the steps recommended in this guide. > **Incident Response:** If you are not a PagerDuty customer, you can safely skip this section. This section is here to help PagerDuty customers jumpstart implementation of Operational Reviews with rich metrics and analytic capabilities that are baked into the platform. Nothing about the review process itself, other than how you gather metrics, is different if you are not a PagerDuty customer. If you are one of the more than 10,000 companies across the globe that uses PagerDuty to manage real-time operations, there are a number of capabilities, features, and products that can support your efforts to run regular operational reviews, including making it easy to collect metrics and improve the richness of those metrics. ## PagerDuty Analytics [PagerDuty Analytics](https://www.pagerduty.com/features/analytics) offers a feature called Operational Review Analytics. This feature was designed to be a companion to this Operational Review Documentation and align directly to the three most common operational reviews run at digital businesses by providing a rich and prescriptive set of analytic capabilities. Three reports are accessible in the PagerDuty web application, which can be customized by adjusting the timeframe of the reports, as well as the Team, Service, and/or Organization scope. Additionally, these reports can be scheduled for delivery to your email inbox. ![PagerDuty Analytics](/images/guides/operational-reviews-guide/pd-analytics.webp) ## PagerDuty Platform Reporting Even if you are not yet using the PagerDuty Analytics product, you can still find a wealth of information and metrics within the [PagerDuty platform](https://www.pagerduty.com/features/#advanced-analytics). PagerDuty Analytics offers up to five distinct reports, surfacing every incident and alert, along with basic metrics across the system, teams, users, and escalation policies. Report availability depends on your PagerDuty platform license type. ## Team & Service Configuration In order to run focused Operational Review meetings with metrics available via PagerDuty, it is critical to have your on-call and incident management settings structured in a way that leads to proper visibility into the data. The two most important configurations are around your Teams and PagerDuty Services. For Teams, make sure that all users in your PagerDuty account are part of at least one team. Set up your PagerDuty teams to mirror your software development/delivery teams. If a group of people in your company wholly owns a technical service, that group of people should be a team in PagerDuty. Make sure the team’s manager is set up as a member of the team, and use the team roles feature to signal that they are the manager. You can learn more about setting up teams from our [Teams Knowledge Base page](/account-admin/teams). For Services, there are many ways to set up your PagerDuty instance, but the method that provides the best visibility into meaningful metrics is to set up one PagerDuty service for every distinct piece of software you manage. All monitoring for that software should be directed to the same service in PagerDuty, and you’ll want to ensure that there is clear team ownership of that service assigned in PagerDuty. See our [Services and Integrations Knowledge Base page](/incident-management/services/services-and-integrations) for how to configure services. ## Modern Incident Response Using PagerDuty to manage major incidents can help you reduce customer-impacting downtime, but it can also increase the richness of the data and metrics which are useful to running your Operational Reviews. PagerDuty’s [Modern Incident Response](https://www.pagerduty.com/features/modern-incident-response/) product offers features such as incident priority, collaboration for multiple responders, automation, stakeholder updates, and more. These features enrich the service health details along with additional data that can surface insights into your incident response processes. > **Incident Response:** Don't forget to ensure your major incident response process is up-to-date using [our open source incident response documentation](/ops-guides/incident-response-guide). --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide/on-call-review # On-Call Review The first and most foundational operational review is the On-Call Review. This is an opportunity to learn directly from the responders that run your digital ![PagerDuty](/images/guides/operational-reviews-guide/OpsReviews-OnCall.webp) The first and most foundational operational review is the On-Call Review. This is an opportunity to learn directly from the responders that run your digital operations and catch problems before they become trends or contribute significant negative impact. The primary purpose of this review is to **understand on-call load and pain**. Next, we seek to identify the source(s) of that load and pain. With that information, we can then transfer knowledge between responders and plan for improvements to future on-call shifts. ## Cadence On-Call Reviews are best conducted with about a week’s worth of on-call history. If your company runs on-call shifts with about a one-week duration, aligning this review with the end of one shift and start of another is ideal. If you operate daily, every two weeks, or monthly on-call shifts, you may choose to run your On-Call Reviews at the start/end of those shifts. However, reviewing on-call load on a weekly basis is a leading practice for most mature organizations. On-Call Reviews should be conducted as standalone meetings and typically require about 30 minutes of a team’s time. For teams that experience meeting fatigue, another option is to reserve the last 30 minutes of another regularly scheduled team meeting to create space for an On-Call Review. ## Scope Reviews should be conducted for individual service teams and consist primarily of the team members that build and support digital services. For example, in an organization with 20 service teams, there will likely be 20 different On-Call Review meetings each week. For organizations with light on-call load or small teams, it can make more sense to run reviews at the department level or with a group of teams at once. The review should cover the time since the last review and focus on how the service(s) that team is responsible for operated and the impact that had for the responder on-call during that time frame. If the team was severely impacted by issues with a service owned by a different team, it may require the other team’s participation as well. ## Meeting Owner and Attendees On-Call Reviews are typically instituted and managed by a team manager. However, if the review coincides with the changing of a shift schedule, the meeting is often run by the on-call responder whose shift is ending. This person is not only the best person to transfer knowledge from themselves to another, they are also the right person to provide incident and source service context to the team manager. The role of the team manager during the meeting is typically to ask probing questions, spot trends others may have missed, and collect information that needs to be shared with other teams or up the management chain. Required meeting attendees include the team manager, the outgoing on-call engineer, and the incoming on-call engineer. While not required, it is a recommended practice to include the entire team in an effort to maximize visibility, share knowledge, and share accountability. ## Metrics To run an effective review, you’ll want three types of information: team and service-level metrics, responder-level metrics, and incident details. You may not be able to easily pull all these metrics at first, and you may have different metrics you find valuable. Use what you have and what you can gather as a way to get started. The most important thing is that you get started. Below is a suggested list of starter metrics to maximize an effective meeting: * Incident count (team total, by service, by responder) * Escalation count (team total) * Off-hours incident count (team total, by responder) * Sleep-hours incident count (team total, by responder) * Interrupting alert count (total, by service, by responder) * Off-hours and sleep-hours interrupting alert count (by responder) * Total hours with at least 1 interrupting alert (team total, by responder) * List of all incidents, with details about root cause, duration, service, etc. ## Conducting the Review This 30-ish minute meeting should be rather short and highly focused. Generally speaking, the meeting should follow this type of agenda: 1. Start with the outgoing on-call responder summarizing the on-call load and pain 1. Review any metrics you have available that can quantify on-call load and pain, focusing on which services triggered alerts and when (use some of the questions below to drive your metrics review) 1. Surface and discuss any incidents that remain open and under active investigation * What does the incoming on-call responder need to know and how can they help resolve that issue if it recurs? 1. Ask if any new monitoring alerts were created by the prior on-call responder, then review those alerts and ensure that the proper response actions are documented 1. Use most of the remaining time to talk through incidents that were addressed and closed during the past shift to determine: * Whether any of these incidents require more follow up work * How the incoming on-call responder can help complete that follow-up work * Whether any of these incidents unactionable and how monitoring can be changed to avoid that unactionable situation in the future 1. Last, discuss concrete actions the incoming on-call responder and/or the rest of the team can take to make the next and all following shifts lighter in load and pain A successful review meeting will allow you to answer most or all of these questions: * How many incidents did we respond to? Was that more or less than the prior week? * Did our alerting miss any incidents? * Which technical services were the biggest contributors to on-call load and pain? * Did anyone on the team experience a particularly heavy on-call/incident response load? * Was it immediately clear if incidents required attention and were actionable? * Did we deal with new incidents we haven’t seen before or repeat incidents? * Are we responding in a timely manner to incidents that require immediate attention? * What effort could improve our future on-call load and what investment recommendations would we make to organization leadership? * Do we need to conduct any training to better enhance on-call and incident response skill sets? ## Taking Action Operational reviews exist to uncover where action can be taken to improve people, business, and customer outcomes. If you had no on-call pain and no way to improve future on-call load, you may not have any action to take after this meeting. More than likely, your team will walk away with actions that can be taken. The nature of the actions will vary depending on what you learned in the review and how your company operates. The actions that come out of an on-call review tend to focus on how the lives of your on-call responders can improve, which is directly tied to technical service operations. Common areas of action might include items like tuning monitoring thresholds to reduce the number of unactionable incidents, updating runbooks with new information needed to more quickly resolve incidents, or recommending investments in technical services to improve reliability. ## Final Notes and Considerations Effectively running this review (and all Operational Reviews) requires adopting a [blameless approach](/ops-guides/postmortem-best-practices). The purpose of this meeting is NOT to judge the performance of any one team or individual; rather, the goal is to surface issues and increase shared understanding without placing blame, casting judgment, or causing any behavior that hinders transparency. If one of your responders experienced a particularly painful on-call shift, there is something you can do about it! Compassion and gratitude go a long way. Let them know that you understand what they had to deal with. Consider thanking them in front of the rest of your team, department, or company. If it was a particularly bad shift, you might send a small gift or even offer comp time off work. At the very least, you can adjust the upcoming on-call schedule to make sure they get a break before having to deal with a heavy on-call load again. However, the best thing you can do for the long-term is committing to making investments that will improve service reliability, processes, and tools that improve on-call life for your teams. --- URL: https://docs.pagerduty.com/ops-guides/operational-reviews-guide/service-review # Service Review Once your organization is consistently conducting On-Call Reviews, that data can be used to conduct Service Reviews at the department or division level. These ![Service Review](/images/guides/operational-reviews-guide/OpsReviews-Service.webp) Once your organization is consistently conducting On-Call Reviews, that data can be used to conduct Service Reviews at the department or division level. These reviews are an opportunity for management to spot trends and make necessary course corrections before negative impacts become broader and potentially more damaging. The purpose of this review is to **understand which technical services are impacting the business**. It seeks to understand not only where impact comes from, but also the type and scope of impact on the business. With that knowledge, management can then focus investment into technical service reliability and process improvements that create better business outcomes. ## Cadence Unlike On-Call Reviews, there is no typical calendar event that creates a logical opportunity to have a Service Review meeting. But most organizations conduct Service Reviews on a monthly cadence. A monthly cadence allows enough time for any changes or improvements to processes and tooling that were identified in previous meetings to be implemented and take effect in a quantifiable way. That cadence also offers an opportunity to make adjustments before issues become too severe, yet is still respectful of the time investment being made by all of the people involved. ## Scope Service Reviews should be conducted for whole divisions or departments. For a large organization, this may mean one Service Review for all the teams responsible for a specific product or line of business. For medium-sized organizations, this could mean one review for the Product Engineering division, another for the IT department, and a third for the Operations division. For smaller companies, a single review may cover all teams in the organization involved with developing and delivering digital products. Regardless of the size of your organization, the scope of Service Reviews should cover the operations of services owned by multiple teams. The metrics and discussion at the meeting should include all technical services owned by teams that roll up to the group (or division or department) running the review meeting. If there are downstream dependencies on the services owned by the teams in question, those services should also be part of the scope of this meeting. Similar to On-Call Reviews, each Service Review should cover the time period since the last meeting (ideally one month). ## Meeting Owner and Attendees This review is typically organized and led by a departmental or divisional leader, usually a Director or Vice President of Engineering, IT, or Operations. Driving this meeting from the senior management level not only ensures participation, it offers a commitment by senior management to take action and follow through with changes to investments into service operations. At small and medium-sized organizations, the review meeting is called, set up, and run by the department/division head themselves. They are typically supported by any data analysts, program managers, or administrative assistants relevant to their projects. At larger organizations, the Service Review may be sponsored by the Office of the CIO or Office of the CTO, with program managers from those offices running or assisting in the running of these reviews with each department or division. The meeting should be attended by all the functional leads and/or direct reports of the department, division, or organization leader that owns the scope of teams and services to be covered in the meeting. These are usually other Vice Presidents, Directors, and Senior Managers of Engineering, IT, and Operations. It is rare for engineering managers to attend this meeting, except in organizations where there are not multiple layers of leadership in Engineering, IT, and/or Operations. On-call responders do not need to be part of this meeting. ## Metrics As the name implies, for the Service Review, you’ll look at metrics primarily through the service lens. In addition to incident metrics through the lens of services, the metrics you’ll use here begin to point more directly to customer impact, through service availability. Similar to the On-Call Review, you may not be able to easily pull all these metrics at first, and you may have different metrics you find valuable. Use what you have and what you can gather as a way to get started. The most important thing is that you get started. Below are suggested metrics for maximum meeting effectiveness: * Service availability against SLA (total and by business service) * Time without major incident (total, by technical service, and business service) * Time without high-urgency incident (total, by technical service, and business service) * Major incident count (total, by technical service, and business service) * High-urgency incident count (total, by technical service, and business service) * Mean time to acknowledge (total and by technical service) * Mean time to resolve (total and by technical service) * A list of all major incidents, with details on incident type, offending technical service, business service(s) impacted, duration, and impact to the business (severity, customer impact counts, etc.) ## Conducting the Review While longer than the On-Call Review meeting, the Service Review is still a highly focused activity. Generally speaking, the meeting should follow this type of agenda: 1. Distribute Service Review metric reports to all attendees ahead of time (this provides an opportunity to pre-read and collect any supplemental information that may be helpful) 1. Review top-line, summary metrics that cover the entire division or department 1. Review business service–level metrics to understand customer impact * Use the same metrics as the top level, but scoped to business services 1. Review metrics and incident trends for technical services that had the greatest impact on underperforming business service metrics 1. Walk through all of the top major incidents for technical services that had the most business service impact * Focus on contributing factors, duration, the postmortem, and status of follow-up items 1. Use the remainder of the meeting to make concrete action plans, focusing on improved business service availability A successful review meeting will allow you to answer most or all of these questions: * What was our uptime and customer availability for the month? * How many incidents did we have? Are they trending up or down? * Were any business services impacted by incidents more than other business services? * Which technical services had the greatest negative impact on business service reliability? * For any technical services that had a negative impact on business services, how many incidents did they have that month? Is the trend going up, down, or staying the same? * What were the main contributing factors to our major incidents? How effective was our response? Are these major incidents likely to happen again? * If we want to improve our uptime and customer availability in the future, where should we invest more people, process, and/or technology resources? ## Taking Action As with all Operational Reviews, the appropriate action to take will be highly dependent on what was learned in the Service Review, as well as organizational culture, current focus, and current goals. However, there are a few general tips and common areas of focus for taking action after a Service Review. The first thing to do is to understand where to prioritize action. By focusing on business services, it’s easier to prioritize investments. Prioritization should not be solely based on incident count or duration; rather, the total impact to businesses services should drive the level of investment placed into its underlying technical services. Next, you’ll need to determine the type of investment a technical service requires. Investments into improving service availability may include things like more training on major incident response training for responsible teams, sharing more contextual information with alerts, refactoring service code, paying off technical debt, making infrastructure upgrades, and many others. Whatever the required action, make sure you can tie the effort back to optimizing for business outcomes by providing clarity over how it impacts customer availability of your digital services. ## Final Notes and Considerations Hopefully, you’re starting to see that the monthly Service Review and the weekly On-Call Review are symbiotic. If your teams are conducting On-Call Reviews, there should be no surprises about what services are in need of attention. If you are an attendee of the Service Review meeting, it would be a good idea to read summaries of your team’s on-call load/pain over the past month in preparation for this meeting. Ask your teams to share their On-Call Review metrics with you. If your teams are conducting On-Call Reviews and following up on identified actions, there should be few mentions of unactionable incidents in the monthly Service Review. If that’s not the case, for example, then it’s a clear indication that your focus should be to run weekly On-Call Reviews ,where resolving unactionable incidents gets prioritized so that it isn’t an issue when it’s time for the next monthly Service Review meeting. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices # Postmortem Best Practices Performing postmortems after incidents is how you learn what you're doing right, where you could improve, and most importantly, how to avoid making the same ![PagerDuty](/images/guides/postmortem-best-practices/Postmortems-Title.webp) Performing postmortems after incidents is how you learn what you're doing right, where you could improve, and most importantly, how to avoid making the same mistakes again and again. Well-designed postmortems allow your teams to iteratively improve your infrastructure and incident response process. The postmortem concept is well known in the technology industry, but it can be difficult for newer individuals, teams, and organizations to adopt the cultural nuances required for effective postmortems. This guide will teach you how to build a culture of continuous learning, the most important components to include in your analysis, and how to conduct effective postmortem meetings. ## Who Is This For? This resource is for on-call practitioners who want to iteratively learn from incidents affecting their team and for managers who want to cultivate a culture of learning in their organization. ## What Is Covered? ### What Is a Postmortem? The who, what, when, and why of [postmortems](/ops-guides/postmortem-best-practices/what-is-a-postmortem). ### Blameless Culture A successful postmortem process is based on a culture of honesty, learning, and accountability. Culture change requires management buy-in, but you can lead culture change no matter your role. This section describes common challenges in building a culture of continuous learning through postmortems, and strategies for overcoming them. - [The Blameless Postmortem](/ops-guides/postmortem-best-practices/blameless-postmortem) - [How to Introduce Postmortems](/ops-guides/postmortem-best-practices/introduce-postmortems) - [Information Sharing](/ops-guides/postmortem-best-practices/information-sharing) - [Accountability](/ops-guides/postmortem-best-practices/accountability) ### How to Write a Postmortem You will learn what information to include in the postmortem, how to collect and present that information, and how to conduct an effective analysis that results in system improvements. - [Step by Step](/ops-guides/postmortem-best-practices/step-by-step) - [Tips for Effective Postmortems](/ops-guides/postmortem-best-practices/effective-postmortems) ### Postmortem Meetings How to conduct productive [postmortem meetings](/ops-guides/postmortem-best-practices/postmortem-meeting). ### Additional Resources - [Template](/ops-guides/postmortem-best-practices/template) - [Checklist](/ops-guides/postmortem-best-practices/checklist) - [Analysis Questions](/ops-guides/postmortem-best-practices/analysis-questions) - [Examples](/ops-guides/postmortem-best-practices/examples) - [Further Reading](/ops-guides/postmortem-best-practices/further-reading) ### License This documentation is provided under the Apache License 2.0. In plain English that means you can use and modify this documentation and use it both commercially and for private use. However, you must include any original copyright notices, and the original LICENSE file. Whether you are a PagerDuty customer or not, we want you to have the ability to use this documentation internally at your own company. You can view the source code for all of this documentation on our GitHub account, feel free to fork the repository and use it as a base for your own internal documentation. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/accountability # Accountability Explains how to set deadlines and clear ownership for postmortem action items, and how to keep them visible so accountability sticks after an incident. ![Accountability](/images/guides/postmortem-best-practices/Postmortems-Accountability.webp) Information sharing and transparency also support an environment that cultivates accountability. A common challenge to effective postmortems is that, after analyzing the incident and creating action items to prevent recurrence, information sharing to increase transparency is never done. Start by setting a policy for when postmortem action items should be completed. At PagerDuty, high-priority action items needed to prevent a Sev-1 incident from recurring should be completed within 15 days after an incident. Action items from a Sev-2 incident should be addressed within 30 days. Communicate this expectation to all of engineering and make sure it is documented for future reference. For action items to get done, they must have clear owners. Because we are an Agile and DevOps shop, the cross-functional teams responsible for the affected service are also responsible for implementing improvements expected to reduce the likelihood of failure. Engineering leadership helps clarify what parts of the system each team owns and sets expectations for which teams own new development and operational improvements. Ownership designations are communicated across the organization so all teams understand who owns what and ownership gaps can be identified. **As always, document this information for future reference and new hires.** Any uncertainty about ownership of an incident's action items are discussed in the postmortem meeting with representatives for all teams that may own the action item. We have also seen improved accountability for completing action items by involving the leaders responsible (product managers and engineering managers) for prioritizing a team's work in the postmortem meeting. Product managers are responsible for defining a good customer experience. Incidents cause a poor customer experience. Engage product managers in postmortem discussions by explaining that it will provide a wider picture of threats to customer experience and ideas on how to improve that experience. Doing so gives engineering a chance to explain the importance of these action items so that product managers will prioritize the work accordingly. Similarly, getting engineering leadership more involved in postmortem discussions gives them a better understanding of system weaknesses to inform how and where they should invest technical resources. Sharing this context with the leaders that prioritize work allows them to support the team's effort to quickly complete high-priority action items from incident analysis. Finally, ensure postmortem action items are discoverable and regularly viewed. Document postmortem action items as you would any other task. The list of action items from an incident analysis should not only live in your postmortem document. Open tickets in your task management tool, within the project of the team that will own the action item, so it can be viewed alongside all other planned work. We label all tickets with the severity level (Sev-1, Sev-2, etc.) and a date tag (YYYYMMDD) so we can easily query tickets that came from specific incidents and build reporting for the number of open tickets from major incidents. > **Key Takeaways:** - Set a policy for postmortem action items: e.g. 15 days for Sev-1 action items, 30 days for Sev-2 action items. > - Clarify ownership of postmortem action items. > - Engage the leaders that prioritize work. > - Open tickets for postmortem action items in your work management ticketing system. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/analysis-questions # Analysis Questions Questions to ask to stimulate deep postmortem analysis. ![Analysis](/images/guides/postmortem-best-practices/Postmortems-Questions.webp) Inspired by Gary Klein’s debriefing questions in Sidney Dekker’s *The Field Guide To Understanding Human Error*, below is a non-exhaustive list to help stimulate deep analysis. Ask “how” and “what” questions, rather than “who” or “why,” to discourage blame and encourage learning. [Download as a PDF](https://postmortems.pagerduty.com/assets/pdf/PostmortemAnalysisQuestions.pdf).
Cues
  • What were you focusing on?
  • What was not noticed?
  • What differed from what was expected?
Previous Knowledge/Experience
  • Was this an anticipated class of problem or did it uncover a class of issue that was not architecturally anticipated?
  • What expectations did participants have about how things were going to develop?
  • Were there similar incidents in the past?
Goals
  • What goals governed your actions at the time?
  • How did time pressure or other limitations influence choices?
  • Was there work the team chose not to do in the past that could have prevented or mitigated this incident?
Assessment
  • What mistakes (for example, in interpretation) were likely?
  • How did you view the health of the services involved prior to the incident?
  • Did this incident teach you something that should change views about this service’s health?
Taking Action
  • How did you judge you could influence the course of events?
  • What options were taken to influence the course of events? How did you determine that these were the best options at the time?
  • How did other influences (operational or organizational) help determine how you interpreted the situation and how you acted?
Help
  • Did you ask anyone for help?
  • What signal brought you to ask for support?
  • Were you able to contact the people you needed to contact?
Process
  • Did the way that people collaborate, communicate, and/or review work contribute to the incident?
  • What worked well in your incident response process and what did not work well?
--- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/blameless-postmortem # The Blameless Postmortem Explains the blameless postmortem philosophy, the cognitive biases that undermine it, and how to keep incident analysis focused on systems, not individuals. ![Blameless](/images/guides/postmortem-best-practices/Postmortems-Blameless.webp) As IT professionals, we understand that failure is inevitable in complex systems. **How we respond to failure when it occurs matters.** In _[The Field Guide to Understanding Human Error](https://www.amazon.com/Field-Guide-Understanding-Human-Error/dp/0754648265)_, Sidney Dekker describes two views on human error: 1) the old view, which asserts that people’s mistakes cause failure, and 2) the new view, which treats human error as a symptom of a systemic problem. The old view ascribes to “the bad apple theory,” which believes that removing bad actors will prevent failure. This view attaches an individual's character to their actions, assuming negligence or bad intent leads to the error. An organization that follows this old view of human error may respond to an incident by finding the careless individual who caused the incident so they can be reprimanded. **This impulse to blame and punish has the unintended effect of disincentivizing the knowledge sharing required to prevent future failure.** Engineers will hesitate to speak up when incidents occur for fear of being blamed. This silence increases overall mean time to acknowledge, mean time to resolve, and exacerbates the impact of incidents. For the postmortem process to result in learning and system improvements, the new view of human error must be followed. In complex systems of software development, a variety of conditions interact to lead to failure. **The goal of the postmortem is to understand what systemic factors led to the incident and identify actions that can prevent this kind of failure from recurring.** A blameless postmortem stays focused on _how_ a mistake was made instead of _who_ made it. This is a crucial mindset leveraged by many leading organizations (such as Etsy, a pioneer for [blameless postmortems](https://codeascraft.com/2012/05/22/blameless-postmortems/)) for ensuring postmortems have the right tone, empowering engineers to give truly objective accounts of what happened by eliminating the fear of punishment. ## Why Being Blame Aware is Hard It is easy to agree that we want a culture of continuous improvement, but it is difficult to practice the blamelessness required for learning. The unexpected nature of failure naturally leads humans to react in ways that interfere with our understanding of it. When processing information, the human mind unconsciously takes shortcuts. By applying general rules-of-thumb, the mind optimizes for timeliness over accuracy. When this produces an incorrect conclusion, it is a cognitive bias. [J. Paul Reed](https://techbeacon.com/blameless-postmortems-dont-work-heres-what-does) argues the blameless postmortem is a myth because the tendency to blame is hardwired through millions of years of evolutionary neurobiology. Ignoring this tendency or trying to eliminate it entirely is impossible. It is more productive to be “blame aware.” **By being aware of our biases, we will be able to identify when they occur and work to move past them.** We touch upon some of the biases below, but for more details, read [Lindsay Holmwood's](http://fractio.nl/2015/10/30/blame-language-sharing/) article on the cognitive biases we must be aware of when performing postmortems. **[Fundamental attribution error](https://en.wikipedia.org/wiki/Fundamental_attribution_error)** is the tendency to believe that what people do reflects their character rather than their circumstances. This describes the old view of human error, assigning responsibility for a failure to bad actors who are careless and incompetent. Ironically, we tend to explain our own actions by our context, not our personality. Combat this tendency to blame by intentionally focusing the analysis on situational causes rather than discrete actions individuals took. Another pervasive cognitive bias is **confirmation bias**, which is the tendency to favor information that reinforces existing beliefs. When presented with ambiguous information, we tend to interpret it in a way that supports our existing assumptions. When combined with the old view of human error, this bias is dangerous for postmortems because it seeks to blame the bad apple. When approaching the analysis with the assumption that an individual is at fault, you will find a way to support that belief despite evidence to the contrary. To combat confirmation bias, Holmwood suggests appointing someone to play devil’s advocate to take contrarian viewpoints during investigations. Be cautious of introducing negativity or combativeness with a devil’s advocate. You can also counter confirmation bias by inviting someone from another team to ask any and all questions that come to their mind. This will help surface lines of inquiry the team has learned to take for granted. **Hindsight bias** is a type of memory distortion where we recall events to form a judgment. Knowing the outcome, it is easy to see the event as being predictable despite there having been little or no objective basis for predicting it. Often, we recall events in a way to make ourselves look better. An example is when a person analyzing the causes of an incident believes they knew it would happen like that. Enacting this bias can lead to defensiveness and division within a team. Holmwood suggests avoiding the hindsight bias by explaining events in terms of foresight instead. Start your timeline analysis at a point before the incident and work your way forward instead of backward from resolution. Another common bias to be aware of is **[negativity bias](https://en.wikipedia.org/wiki/Negativity_bias)**. This is the notion that things of a more negative nature have a greater effect on one’s mental state than those of neutral or even positive nature. Research on social judgments has shown negative information disproportionately impacts a person’s impression of others. This relates to the “bad apple theory,” the belief that there are negative actors in your organization to blame for failures. Studies have also shown people are more likely to attribute negative outcomes to the intentions of another person than neutral and positive outcomes. This also explains our tendency to blame individuals’ characters to explain a major incident. In reality, things go right more often than they go wrong, but we tend to focus on and magnify the importance of negative events. Focusing on, exaggerating, and internalizing incidents as negative events can be demoralizing and lead to burnout. Reframing incidents as learning opportunities and remembering to describe what was handled well in your response can help balance perspective ### Cognitive Biases | Bias | Definition | Countermeasure | |---|---|---| | Fundamental attribution error | What people do reflects their character rather than their circumstances. | |Intentionally focus the analysis on situational causes rather than discrete actions individuals took. | | Confirmation bias | Favoring information that reinforces existing positions. | Appoint someone to play devil’s advocate to take contrarian viewpoints during investigations. | | Hindsight bias | Seeing the incident as inevitable despite there having been little or no objective basis for predicting it because we know the outcome. | Explain events in terms of foresight instead. Start your timeline analysis at a point before the incident, and work your way forward instead of backward from resolution. | | Negativity bias | Things of a more negative nature have a greater effect on one’s mental state than neutral or even positive things. | Reframe incidents as learning opportunities, and remember to describe what was handled well in incident response. | We all have these cognitive biases that can lead to distorted views of events and damage team relationships if gone unchecked. It is important to be aware of these tendencies so we can acknowledge bias when it occurs. By making postmortems a collaborative process, teams can work as a group to identify blame and then constantly dig deeper in the analysis. ## How to Cultivate a Blameless (or Blame-Aware) Culture Acknowledging blame and working past it is easier said than done. What behaviors can we adopt to move towards a blameless culture? Holmwood eloquently writes about the importance of the words we use to minimize blame and maximize learning. He urges us to ask “what” questions (e.g., “What did you think was happening?” and “What did you do next?” Asking “what” questions grounds the analysis in the big-picture contributing factors to the incident. In his article “[The Infinite Hows](https://www.oreilly.com/ideas/the-infinite-hows),” John Allspaw encourages us to ask “how” questions because they get people to describe (at least some of) the conditions that allowed an event to take place. Holmwood also notes that “how” questions can help clarify technical details, distancing people from the actions they took. Avoid asking “why” questions because it forces people to justify their actions, attributing blame. [Crucial Accountability](https://www.vitalsmarts.com/crucial-accountability-training/) offers a helpful framework for approaching difficult conversations about unmet expectations that can be applied to postmortems when emotions run high. When analyzing failure, we may fall into victim, villain, and helpless stories that propel emotions and attempt to justify our worst behaviors. You can move beyond blame by telling the rest of the story. Consider your and others’ roles in the problem. Ask yourself why a reasonable, rational, and decent person may have taken the action that seems to have caused the incident. This thinking will help turn attention to the multiple systemic factors that led to the incident. Even when you have made a best effort to remain blameless, it is possible someone may still become defensive during a postmortem meeting if they feel they are being blamed. When this happens, work to restore mutual purpose and mutual respect so a productive discussion can continue. Restore mutual purpose by reiterating that the goal of the postmortem is to understand what systemic factors lead to the incident and collaboratively identify actions that can reduce failure moving forward. Often, people act out defensively when they feel their character is being attacked. Restore mutual respect by contrasting. Say what you did not intend (“I did not mean to imply you’re bad at your job.”) contrasted with what you do intend (“I meant to inquire to the situational factors that would lead any responder to take that action.”) Refocus your inquiry away from individual motivation, which implies blame. Abstracting to an inspecific responder also encourages other responders to contribute more suggestions as to what could have contributed to the system failure. > **Key Takeaways:** - Ask “what” and “how” questions rather than “who” or “why.” > - Consider multiple and diverse perspectives. > - Ask yourself why a reasonable, rational, and decent person may have taken a particular action. > - When inquiring about a human action, abstract to an inspecific responder. Anyone could have made the same mistake. > - Restore mutual purpose and mutual respect by contrasting what you did not intend with what you do intend. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/checklist # Checklist A checklist for performing a postmortem. ![Postmortems Checklist](/images/guides/postmortem-best-practices/Postmortems-Checklist.webp) For each incident that requires a postmortem (Sev-1 or Sev-2 incidents), we clone a ticket template that has subtasks for each step of performing a postmortem. This helps a team collaborate on creating the postmortem and provides visibility on progress leading up to the postmortem meeting. Below are the steps involved in performing a postmortem at a high level. [Download as a PDF](https://postmortems.pagerduty.com/assets/pdf/PostmortemChecklist.pdf). ![Checklist](/images/guides/postmortem-best-practices/PostmortemChecklist.webp) --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/effective-postmortems # Tips for Effective Postmortems Concrete do's and don'ts for writing postmortems that accurately capture impact, avoid blame, and dig past surface-level causes. ![Effective Postmortems](/images/guides/postmortem-best-practices/Postmortems-Tips.webp) Writing detailed and accurate postmortems allows you to learn quickly from mistakes and improve systems and processes for everyone. This guide lists some of the things we do to make sure our postmortems are effective. ## Do - Make sure the timeline is an accurate representation of events. - Define any technical lingo/acronyms you use that newcomers may not understand. - [Separate what happened from how to fix it](https://www.youtube.com/watch?v=TqaFT-0cY7U). - Write follow-up tasks that are actionable, specific, and bounded in scope. - Discuss how the incident fits into our understanding of the health and resiliency of the services affected. ## Do Not - Use the word "outage" unless it really was an outage. Accurately reflect the impact of an incident. Outage is usually too broad a term to use. It can lead customers to think the product was fully unavailable when that likely was nowhere near the case. - Change details or events to make things "look better." Be honest in postmortems, otherwise they lose their effectiveness. - Name and shame someone. Keep postmortems blameless. If someone deployed a change that broke things, it's not their fault. Everyone is collectively responsible for building a system that allowed them to deploy a breaking change. - Blame "human error." Very rarely is the mistake "rooted" in a human performing an action. There are often several contributing factors (the script the human ran didn't have rate limiting, the documentation was out of date, etc.) that can and should be addressed. - Only point out what went wrong. Drill down to the underlying causes of the issue. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/examples # Examples Examples of postmortems. ![Postmortem Examples](/images/guides/postmortem-best-practices/Postmortems-Examples.webp) Here are some examples of postmortems from other companies as a reference, * [Stripe](https://support.stripe.com/questions/outage-postmortem-2015-10-08-utc) * [LastPass](https://blog.lastpass.com/2015/06/lastpass-security-notice.html/comment-page-2/) * [AWS](https://aws.amazon.com/message/5467D2/) * [Twilio](https://www.twilio.com/blog/2013/07/billing-incident-post-mortem-breakdown-analysis-and-root-cause.html) * [Heroku](https://status.heroku.com/incidents/151) * [Netflix](http://techblog.netflix.com/2012/10/post-mortem-of-october-222012-aws.html) * [GOV.UK Rail Accident Investigation](https://www.gov.uk/government/publications/kyle-beck-safety-digest/near-miss-at-kyle-beck-3-august-2016) * [A List of Post-mortems!](https://github.com/danluu/post-mortems) --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/further-reading # Further Reading A curated reading list on blameless culture, incident analysis techniques, and the mechanics of running postmortems and retrospectives. ![Futher Reading and Resources](/images/guides/postmortem-best-practices/Postmortems-Resources.webp) ## Creating a Blameless Culture ### Books * [The Field Guide to Understanding Human Error](https://www.amazon.com/Field-Guide-Understanding-Human-Error/dp/0754648265) (Sidney Dekker) * [Crucial Accountability](https://www.amazon.com/Crucial-Accountability-Resolving-Expectations-Commitments/dp/0071829318) (Kerry Patterson, Joseph Grenny, Ron McMillan, Al Switzler, David Maxfield) ### Articles * [Blame. Language. Sharing.](http://fractio.nl/2015/10/30/blame-language-sharing/) (Lindsay Holmwood) ### Talks * "[Three analytical traps in accident investigation](https://www.youtube.com/watch?v=TqaFT-0cY7U)" (Johan Bergstrom) * "[Two views on Human Error](https://www.youtube.com/watch?v=rHeukoWWtQ8)" (Johan Bergstrom) * [Advanced PostMortem Fu and Human Error 101 (Velocity 2011)](http://www.slideshare.net/jallspaw/advanced-postmortem-fu-and-human-error-101-velocity-2011) (John Allspaw) ## How to Analyze Incidents ### Articles * [The Infinite Hows](https://www.oreilly.com/ideas/the-infinite-hows) (John Allspaw) ### Documents * [Postmortem Action Items: Plan the Work and Work the Plan](https://www.usenix.org/system/files/login/articles/login_spring17_09_lunney.pdf) (John Lunney, Sue Lueder, and Betsy Beyer) ## Process and Mechanics of Postmortems and Retrospectives * [The Agile Retrospective Wiki](http://retrospectivewiki.org/index.php?title=Agile_Retrospective_Resource_Wiki) --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/information-sharing # Information Sharing Explains how sharing completed postmortems and opening meetings organization-wide builds system knowledge and reinforces a blameless culture. ![Information Sharing](/images/guides/postmortem-best-practices/Postmortems-InfoSharing.webp) You can scale culture through sharing.1 People want to share their successes, and when people see something that’s going well, they want to replicate that success. It may seem counterintuitive to share incident reports because it seems like you’re sharing a story of failure rather than success. The truth is, practicing blameless postmortems leads to success because it enables teams to learn from failure and improve systems to reduce the prevalence of failure. Framing incidents as learning opportunities with concrete resulting improvements rather than a personal failure also increases morale, which increases employee retention and productivity. **Sharing the results of postmortems has two main benefits:** 1. It increases system knowledge across the organization. 1. It reinforces a blameless culture. By sharing learnings from incident analysis, you help the entire organization learn, not just the affected teams responsible for remediation. PagerDuty sends completed postmortems via email to an “Incident Reports” distribution list that includes all of engineering, product, and support, as well as all Incident Commanders (who may not be in any of those departments.) This widens system knowledge for everyone involved in incident response. We encourage teams to learn postmortem best practices from each other by hosting a community of experienced postmortem writers available to review postmortems before they are shared more widely. This ensures blameless analysis through feedback and coaching while postmortems are being written. We also schedule all postmortem meetings on a shared calendar. This calendar is visible to the entire company, and anyone is welcome to join. This gives engineering teams the opportunity to learn from each other on how to practice blamelessness and deeply analyze incident causes. It also makes clear that incidents are not shameful failures that should be kept quiet. Being transparent about system failure reinforces a culture of blamelessness. When postmortems are shared, teams will see that individuals are not blamed or punished for incidents. This will reduce the fear of speaking up when issues inevitably occur. Creating a culture where information can be confidently shared leads to a culture of continuous learning in which teams can work together to design improvements. > **Key Takeaways:** * Create a community of experienced postmortem writers to review postmortem drafts and spread best practices. > * Schedule postmortem meetings on a shared calendar, open for any interested parties to listen and learn. > * Email completed postmortems to all teams involved in incident response to share learning and reinforce blamelessness. --- 1. Puppet’s [2018 State of DevOps Report](https://puppet.com/resources/whitepaper/state-of-devops-report) tells us operationally mature organizations adopt practices that promote sharing. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/introduce-postmortems # How to Introduce Postmortems Covers how to win leadership and team buy-in for a blameless postmortem practice, including tactics for building psychological safety. ![How to Introduce](/images/guides/postmortem-best-practices/Postmortems-Introduce.webp) Whether you're introducing postmortems as an entirely new practice at your organization or working to improve an existing process, culture change is hard. No matter your role, the first step to introducing a new process is getting buy-in from leadership and individual contributors because, often, bottom-up changes are more successful than top-down mandates from management. To practice blameless postmortems and encourage a culture of continuous improvement, you need commitment from leadership that no individuals will be reprimanded in any way after an incident. To convince management to support a shift to blameless analysis, clarify how blame is harmful to the business and explain the business value of blamelessness. For instance, punishing individuals for "causing" incidents discourages people from speaking up when problems occur for fear of being blamed. This silence will increase the mean time to acknowledge incidents, mean time to resolve, and, ultimately, exacerbate the impact of incidents. Organizations can rapidly improve the resilience of their systems and increase the speed of innovation by eliminating the fear of blame and encouraging collaborative learning. It may sound silly, but when selling a new blameless postmortem process to management, avoid blaming them for blaming others. Acknowledge that practicing blamelessness is difficult for everyone. Teams can help hold each other accountable by calling each other out when blame is observed in response to failure. Ask leadership if they will be receptive to receiving that feedback if and when they accidentally suggest blame after an incident. A verbal commitment from management to refrain from punishing people for causing incidents is an important start to introducing blameless postmortems, but that alone will not eliminate the fear of blame. Once you have leadership support, you will also need buy-in from the individual contributors who will be performing postmortem analysis. Share that you have commitment from management that no one will be punished after an incident. Because the tendency to blame is not unique to managers, explain to the team why blame is harmful to trust and collaboration. Agree to work together to become more blame-aware and kindly call each other out when blame is observed. When Google studied their teams to learn what behaviors made groups successful, they found that psychological safety was the most critical factor for a team work well together. Harvard Business School professor Amy Edmondson defines psychological safety as "a sense of confidence that the team will not embarrass, reject, or punish someone for speaking up." A sense of safety makes people feel comfortable enough to share information about incidents, which allows for deeper analysis and results in learnings that improve the resilience of your systems. Google found that high-performing teams with strong psychological safety share two key behaviors. First, these teams demonstrate conversational turn-taking. Team members speak in roughly the same proportion. When everyone is able to share their perspective, the collective intelligence of the group increases. Second, good teams have high social sensitivity or empathy. Successful teams are able to sense when someone is feeling upset or left out based on nonverbal cues. These behaviors and the resulting sense of psychological safety can be encouraged by modeling vulnerability. A manager at Google found his team was able to find ways to work better together after doing an ice-breaker activity in which everyone shared something personal about themselves. The manager started by telling the team about his struggle with cancer, which helped everyone else feel more comfortable sharing something. Creating emotional bonds within a team leads to greater psychological safety and higher performance. Culture change does not happen overnight. Iteratively introduce new practices to the organization by starting small, sharing successful results of experimenting with new practices, and slowly expanding those practices across teams. You can start experimenting with blameless postmortems within a single team. To get started, use our ["How to Write a Postmortem"](/ops-guides/postmortem-best-practices/step-by-step) guide to share tips. It is also easy to start practicing blameless postmortems by analyzing smaller incidents before tackling major ones. Doing postmortems for smaller incidents allows the team to develop the skill of deeper system analysis that goes beyond how people contributed to an incident. This also helps protect individuals while everyone is practicing blameless culture as people may revert to blame, but the impact on the individual will be less than if that same mistake happens with a more critical incident. > **Key Takeaways:** - Sell the business value of blamelessness: faster incident resolution, more resilient systems, more time for innovation > - Commit to kindly calling each other out when blame is observed > - Start with a single team > - Start with smaller incidents --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/next-steps # Next Steps Now that you have learned how to create a postmortem, let's take a look at how to create one in the PagerDuty application. ![Next Steps](/images/guides/postmortem-best-practices/Postmortems-NextSteps.webp) ## Create a Report in PagerDuty If you are using PagerDuty for incident management, we strongly encourage you to take advantage of our postmortems feature. This allows you to associate incidents and other data within PagerDuty with your report, which will help with timeline generation and allow you to write a more comprehensive report. Note that only non-stakeholders can create, modify, and/or delete postmortems. (For a matrix of user permissions, please see our [support page](/account-admin/user-roles) and refer to the postmortems line items.) ### Create the Report To create a postmortem from an incident, you can select the (resolved) incident and click the New Postmortem Report button: ![Create a New Report Option 1](/images/guides/postmortem-best-practices/1NewPostmortemReport.webp) Alternatively, you can create a postmortem from the catalog, by either going to Incidents -> Postmortems or directly to `yoursubdomain.pagerduty.com/postmortems`. From there, you click New Report: ![Create a New Report Option 2](/images/guides/postmortem-best-practices/2NewPostmortemReport.webp) If you're creating a postmortem report from the catalog, you'll need to associate the incident after you start the report. If you include the estimated start and/or end times, the PagerDuty app will limit the possible incidents associated with that report to incidents that happened in that timeframe. ![Data Sources](/images/guides/postmortem-best-practices/3PostmortemDataSources.webp) Regardless of whether you created a report from an incident or the catalog, you can add additional incidents using the timeframe or incident number for situations where multiple incidents apply to a single report. The PagerDuty app will create a timeline to appear in the postmortem based on the in-app events: ![Create Timeline](/images/guides/postmortem-best-practices/4CreateTimeline.webp) If you have integrated with Slack or another data source, that information will also appear in the Available Data on the left. You can choose which items to add or remove using the arrows in the center. After you've completed the timeline, you will need to write in the Analysis. This section has several subsections. Some of the default subsections are Overview, What Happened, and Resolution: ![Postmortem Details](/images/guides/postmortem-best-practices/5PostmortemDetail.webp) Once you have the information you would like in the report, click Save & View Report. This will save the report in the Draft state (the report will also autosave in the Draft state). The states available for the postmortem report are: Draft, In Review, Reviewed, and Closed. You can edit the status by clicking on the report from the Postmortem Catalog and using the Status drop down menu, which is located at the top of the page: ![Change Postmortem Status](/images/guides/postmortem-best-practices/6ChangePostmortemStatus.webp) ## Addenda ### External Access You can export your postmortem report to a PDF at any stage. This is primarily used if there are reviewers not in the PagerDuty app or if there is a different, centralized tool for the company for others to view the final report. To save as a PDF, simply select the report from the Postmortem Catalog and click the Save as PDF button: ![Export Postmortem to PDF](/images/guides/postmortem-best-practices/7ExportPostmortemPDF.webp) ### Customizations We strongly recommend that you modify the default report template to fit your company's needs. This can involve adding or removing sections, changing wording to match common language, or modifying the clarifying text in each section so that it communicates what is needed. If you would like to add, edit, or remove sections you can do so under Settings in the Postmortem Catalog: ![Edit the Postmortem Template](/images/guides/postmortem-best-practices/8EditPostmortemTemplate.webp) You can Edit sections by clicking on the gear for the appropriate section. You can also click Add Section at the bottom of the template to add a completely new section: ![Edit Postmortem Section Text Areas](/images/guides/postmortem-best-practices/9EditPostmortemSections.webp) Changes will only apply to postmortem reports moving forward—they will not apply to reports that have already been created. For some guidance for what questions and clarifying information to put on your questions, take a look at the [Analysis Questions section](/ops-guides/postmortem-best-practices/analysis-questions) under the Resources for this guide. If at any point you'd like to start again from the default template, you can reset the template. To revert to the original default sections, click on the Reset Template button at the top of your Report Template. You will be prompted in a pop-up menu to Reset Template or Cancel. ### Navigating Between Reports and Associated Incidents Currently, the only way to see an incident associated with a report is to open the report and look at the incidents that have been added to it. You cannot currently view a report by navigating to an incident to see an associated report. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/postmortem-meeting # The Postmortem Meeting After you have completed the written postmortem, follow up with a meeting to discuss the incident. The purpose of this meeting is to deepen the postmortem ![The Postmortem Meeting](/images/guides/postmortem-best-practices/Postmortems-Meeting.webp) ## Purpose After you have completed the written postmortem, follow up with a meeting to discuss the incident. **The purpose of this meeting is to deepen the postmortem analysis through direct communication and to get buy-in for action items.** The asynchronous production of the written postmortem helps the team start learning from the incident, but having a conversation leads to deeper learning. Furthermore, having a meeting scheduled to discuss the written postmortem creates [accountability](/ops-guides/postmortem-best-practices/accountability) for the postmortem to be completed in a timely manner. Using this time to discuss action items also helps ensure that those tasks will be completed. An anti-pattern for the postmortem meeting is to be overly focused on the immediate concerns documented in the written postmortem. Avoid filling the meeting time by simply reading through each section of the document. The best use of this time is to take a step back from the detailed analysis to better understand the systemic factors that led to the incident. Some teams make use of the [Retrospective Prime Directive](http://retrospectivewiki.org/index.php?title=The_Prime_Directive) to set the tone for the meeting and serve as a regular reminder of the goals. It can be a helpful tool to anchor the discussion and provide a clean slate to start a retrospective, postmortem, or post-incident review. > "Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand." --Norm Kerth, Project Retrospectives: A Handbook for Team Review **The most important outcome of the postmortem meeting is buy-in for the action plan.** This is an opportunity to discuss proposed [action items](/ops-guides/postmortem-best-practices/step-by-step), brainstorm other options, and gain consensus among team leadership. Sometimes the ROI of proposed action items is not great enough to justify the work or postmortem action items must be delayed for other priorities. The postmortem meeting is a time to discuss these difficult decisions and make clear what work will and will not be done, as well as the expected implications of those choices. Whereas the written postmortem is intended to be shared widely in the organization, the primary audience for the postmortem meeting is the teams directly involved with the incident. This meeting gives the team a chance to align on what happened, what to do about it, and how they will communicate about the incident to internal and external stakeholders. > **Tip:** Send a link to the postmortem document to meeting attendees 24 hours before the meeting. Though the postmortem does not need to be complete when it is sent to the attendees, it should be finished before the postmortem meeting. It is still worth sending an incomplete postmortem to meeting attendees in advance so they can start reading through the document. > > This will help you avoid wasting time in the meeting simply reading through the document. Remember the purpose of the meeting is to have an in-depth conversation about what caused the incident and how to prevent it in the future, not to review the document. The postmortem meeting is also an opportunity to clarify any questions about what happened and what the team plans to do to prevent it from happening again. Encourage attendees to ask any and all questions to help everyone get on the same page > and help the team consider new perspectives for their analysis. ## Agenda Here is a sample agenda for the meeting: 1. **Postmortem owner** summarizes incident causes and timeline. **Facilitator** leads discussion: - What were the larger cultural and structural factors that lead to the incident? **How did we get here?** 1. **Postmortem owner** summarizes proposed follow-up action items. **Facilitator** leads discussion: - Is the team **confident** this plan will reduce the likelihood of this incident recurring? - **What more or different work might be needed?** - Will team leadership (Engineering Manager, Product Manager, Tech Lead, etc.) **commit** to prioritizing these action items? 1. **Customer liaison** summarizes customer impact. - Provide any new context about customer reaction to the incident. - Review and approve external communication drafted in the postmortem. ## Who Participates The postmortem owner invites the following people to the postmortem meeting. Below is more detail about the role each plays in the discussion. - Always - The [incident commander](/ops-guides/incident-response-guide/incident-commander). - The incident commander is responsible for coordinating the response. During the postmortem meeting the incident commander can provide valuable feedback on the incident response effort and process improvements. - The incident commander shadowee (if there was one). - This person may have served as the [scribe](/ops-guides/incident-response-guide/scribe) or [deputy](/ops-guides/incident-response-guide/deputy). The deputy incident commander is responsible for adding necessary responders to the call and updating internal stakeholders outside of the incident response call. The deputy can provide valuable feedback on the response effort and the ease or difficulty of communicating with additional responders and stakeholders during incident response. - [Service owners](/ops-guides/incident-response-guide/subject-matter-expert) and other key engineers involved in the incident. - On-call service owners and other engineers that responded to the incident are the experts of the affected services. During the postmortem meeting they can provide historical context about how the systems were built, cultural context about what was happening with the team leading up the incident, and proposals for what work would reduce the likelihood of this incident recurring. - Productive postmortem discussions will include engineers with in-depth knowledge of the part of the system that their team owns. If the engineer(s) that responded to the incident are newer to the team, it will be helpful to include more experienced engineers from their team in the postmortem meeting. - Engineering manager for impacted systems. - The manager responsible for the teams that responded to the incident attends the postmortem meeting to inform their staffing and technical investment decisions - Product manager for impacted systems. - Product managers attend postmortem meetings to understand the effect incidents have on their customers' experience. For postmortem action items to be prioritized and completed, it is critical to engage product managers in this discussion of the importance and scope of proposed follow-up tasks. - Optional (Only Sev-1 incidents) - [Customer liaison](/ops-guides/incident-response-guide/customer-liaison). - The customer liaison can speak to customers' reactions to the incident. They need to understand the team's decision on action items so they can finalize and send external messaging. ## Facilitation ### What Is Facilitation The facilitator's role in the postmortem meeting is different from the other participants. The facilitator does not voice their own ideas in the meeting; instead, they encourage the group to speak up and keep the discussion on track. The postmortem owner, the incident commander, or any other meeting attendee that played an active role during the incident are the ones who need to contribute to the discussion and should not also be responsible for facilitating. The facilitator: - Encourages people to speak up and makes sure that everyone is heard. - Clarifies insights and challenges the team with questions. - Helps the team see different perspectives and different options. - Keeps everyone on time and on track. Cuts off tangents and stops people from dominating the entire meeting. - Speaks as little as possible. Remember to guide the discussion, but do not take over the meeting. The facilitator does not: - Make decisions. - Take sides. If the facilitator takes sides, team members might feel attacked and might stop contributing to the meeting. - Comment on what people say, even if they are trying to give positive feedback. It may make the speaker feel validated, but it might also make the others feel worse about what they have to say or discourage them from contributing something. ### Who Should Facilitate Good facilitators tend to have a high level of emotional intelligence and can easily read non-verbal cues to understand how people are feeling. They use this sense to cultivate an environment where everyone is comfortable speaking. Agile coaches and project managers are often skilled facilitators. At PagerDuty, we have a guild of confident facilitators who coach individuals interested in learning how to facilitate. When searching for individuals in your organization to help facilitate postmortem meetings, look for people with these core competencies: - Can read non-verbal cues to assess how people are feeling in the room and spot who might have something to say. - Can paraphrases what is said to clarify for self and others. - Can ask open questions to stimulate deeper thinking. - Is comfortable interrupting when discussion gets off track or when someone dominates the discussion. - Can redirect conversation to focus on goals. - Can keep track of time and give time reminders. - Can drive discussion to decision-making and action items. Postmortem meeting facilitators do not need to be experts in the affected systems. Facilitators do not need to be well-versed in the content of the discussion. Remember, the facilitator does not contribute their own opinions to the discussion, but works to get others to speak. The meeting attendees that were involved with the incident response are the experts on the incident, and the facilitator will ask the right questions to encourage those experts to share information with the group. Your facilitator should, however, be familiar with the postmortem process and the goals of the postmortem meeting so they can guide the group discussion to achieve those goals. Postmortem meeting facilitators must have a strong understanding of [blamelessness](/ops-guides/postmortem-best-practices/blameless-postmortem) so they can help the group avoid blaming speech in the meeting. ## Facilitation Tips The postmortem meeting facilitator helps the team dig deeper into their analysis, [avoid blame](/ops-guides/postmortem-best-practices/blameless-postmortem), and get buy-in for their action items. Common challenges for the postmortem meeting are being overly focused on the written postmortem and succumbing to the tendency to blame individuals for system failure. Below are tips on how to run effective postmortem meetings and how to handle awkward situations when they arise. **Housekeeping** - Set ground rules at the beginning of the meeting. - Set the expectation that everyone should speak but no-one should hog the conversation. - Remind the group that we practice blameless postmortems. - Establish a safe word for when the conversation gets off track. - If a team member notices the conversation is getting off-topic they can say the safe word and have the team re-evaluate the usefulness of the discussion. At PagerDuty, some teams use the acronym ELMO which stands for "Enough, let's move on." This takes pressure off the facilitator alone to interrupt when discussion gets off-topic. - Share the agenda so the team is clear on what is on- and off-topic. - Use a timer to timebox. - You can timebox each agenda item. Presenting a timer makes everyone aware of the time limit and reduces the need for the facilitator to interrupt for time. - Present the postmortem document from your laptop onto the TV so everyone can see. [**How to avoid blame:**](/ops-guides/postmortem-best-practices/blameless-postmortem) - Remind the team at the start of the meeting and/or when blame occurs during the meeting that we have agreed to practice blameless postmortems and call each other out when blame occurs. - Look out for and avoid "who" or "why" questions, which limit analysis and imply blame. Instead ask "what" and "how" questions, such as: - "What did you think was happening?" - "What did you do next?" - "How did that action make sense at the time?" - When inquiring about a human action, abstract to an non-specific responder. Remind the team anyone could have made the same mistake. - "What could have led any responder to take that action?" **What to do when the conversation is getting off-topic:** - The facilitator's job is to keep the team on track and will need to interrupt to remind the team of the meeting goals by asking if it is valuable to continue with a topic or if it can be taken offline. - "Sorry to interrupt, but this topic seems unrelated to the goals of this meeting, do we want to go back to the original topic or continue with this discussion?" - Timebox agenda items. Once the time is done they can vote if they want to keep talking for another few minutes. **What to do when one person is dominating the meeting:** - Say upfront that participation from everyone is important. Explain the facilitator's responsibilities so they won't be offended if they are asked to stop talking or speak up. Pay attention to how much people are talking throughout the meeting. - "I wasn't able to hear what the first person was saying." - Act as a mediator and call out when people are getting interrupted: "Hold that thought – I want to make sure Shari has a chance to finish" **If a team member has not said anything, how do you get them to contribute:** - "Let's go around the room and hear from everyone" - "What's stood out for you so far?" - "What else might we need to consider?" **How to stimulate analysis:** - Ask open questions, no questions that can be answered with "yes" or "no." - Reference our [analysis questions](/ops-guides/postmortem-best-practices/analysis-questions). The team may have asked themselves these questions as they were preparing the written postmortem. Asking some of these in the meeting will encourage new, collaborative thinking. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/step-by-step # Step by Step A step-by-step walkthrough of running a postmortem, from scheduling the meeting through analyzing causes and sharing results, plus owner responsibilities. ![Step by Step](/images/guides/postmortem-best-practices/Postmortems-StepByStep.webp) Below are the steps involved in performing a postmortem at a high level. Below are the details of how to perform each step. 1. Create a new postmortem for the incident. 1. Schedule a postmortem meeting within the required timeframe for all required and optional attendees on the "Incident Postmortem Meetings" shared calendar. 1. Populate the incident timeline with important changes in status/impact and key actions taken by responders. - For each item in the timeline, include a metric or some third-party page where the data came from. 1. Analyze the incident. - Identify superficial and root causes. - Consider technology and process. 1. Open any follow-up action tickets. 1. Write the external messaging. 1. Ask for review. 1. Attend the postmortem meeting. 1. Share the postmortem. ## Owner Responsibilities At the end of a major incident call, or very shortly after, the [Incident Commander](/ops-guides/incident-response-guide/incident-commander) selects one responder to own the postmortem. The selected owner will be notified directly by the Incident Commander. Writing the postmortem will ultimately be a collaborative effort, but selecting a single owner will help ensure it gets done. The owner of a postmortem is responsible for the following: - Scheduling the postmortem meeting on the shared calendar and inviting the relevant people (this should be scheduled within 3 calendar days for a Sev-1 and 5 business days for a Sev-2). - Investigating the incident, pulling in whoever is needed from other teams to assist in the investigation. - Ensuring the page is updated with all of the necessary content. See our [Template](/ops-guides/postmortem-best-practices/template) for what should be included. - Creating follow-up tickets. (The owner is only responsible for creating the tickets, not following them up to resolution). - Reviewing the postmortem content with appropriate parties before the meeting, and running through the topics at the postmortem meeting (the Incident Commander will "run" the meeting and keep the discussion on track, but you will likely be doing most of the talking). - Communicating the results of the postmortem internally. The owner of a postmortem creates the postmortem document and updates it with all relevant information. ## Administration ![Administration](/images/guides/postmortem-best-practices/1Administration.webp) 1. Create the document. 2. Add all responders to it. 3. Schedule the meeting. If not already done by the Incident Commander, the postmortem owner's first step is to create a new, empty postmortem for the Incident. Go through the history in Slack to identify the responders and add them to the page so they can help populate the postmortem. Include the Incident Commander and Scribe as well. Add a link to the incident call recording. Next, schedule the postmortem meeting for 30 minutes to an hour, depending on complexity of the incident. Scheduling the meeting at the beginning of the process helps ensure the postmortem is completed within the SLA. **The meeting should be scheduled within 3 calendar days for a Sev-1 and 5 business days for a Sev-2.** Don't worry about finding the best time for all attendees. The priority is to schedule within this timeframe and attendees should adjust their schedules accordingly. At PagerDuty, we schedule all postmortem meetings on a shared "Incident Postmortem Meetings" calendar so they are easily discoverable for any interested parties across the organization. Invite the following people to the postmortem meeting: - Always - The [incident commander](/ops-guides/incident-response-guide/incident-commander). - The incident commander shadowee (if there was one). - [Service owners](/ops-guides/incident-response-guide/subject-matter-expert) involved in the incident. - Key engineer(s)/responders involved in the incident. - Engineering manager for impacted systems. - Product manager for impacted systems. - Optional - [Customer liaison](/ops-guides/incident-response-guide/customer-liaison) (only for Sev-1 incidents). PagerDuty postmortems have a "Status" field that indicates where in our process the postmortem currently is. Here's a description of the values and how we use them. | Status | Description | |-|-| | **Draft** | Indicates that the content of the postmortem is still being worked on. | | **In Review** | The content of the postmortem has been completed, and is ready to be reviewed during the postmortem meeting. | | **Reviewed** | The meeting is over and the content has been reviewed and agreed upon.
If there is an "External Message", the Customer Support team will take the message and update our status page as appropriate. | | **Closed** | No further actions are needed on the postmortem (outstanding issues are tracked in JIRA).
If no "External Message", you can skip straight to this once the meeting is over.
If there's an "External Message", then the Support team will update it to this status once the message is posted. | ## Create a Timeline ![Timeline](/images/guides/postmortem-best-practices/2CreateATimeline.webp) Begin by focusing on the timeline. Document the facts of what happened during the incident. Avoid evaluating what should or should not have been done and coming to conclusions about what caused the incident. Presenting only the facts here will help avoid blame and supports a deeper analysis. Note the incident may have started before responders became aware of it and began the response effort. The timeline includes important changes in status/impact and key actions taken by responders. To avoid hindsight bias, start your timeline at a point before the incident and work your way forward instead of backwards from resolution. Review the incident log in Slack to find key decisions made and actions taken during the response effort. Also include information the team didn't know during the incident that, in hindsight, you wish you would have. Find this additional information by looking at monitoring, logs, and deployments related to the affected services. You'll take a deeper look at monitoring during the analysis step, but start here by adding key events related to the incident, and include changes to incident status and the impact to the timeline. For each item in the timeline, identify a metric or some third-party page where the data came from. This helps illustrate each point clearly and ensures you remain rooted in fact rather than opinions. This could be a link to a monitoring graph, a log search, a tweet, etc.—anything that shows the data point you're trying to illustrate in the timeline. > **Key Takeaways:** * Stick to the facts. > * Include changes to incident status and impact. > * Include key decisions and actions taken by responders. > * Illustrate each point with a metric. ## Document Impact ![Impact](/images/guides/postmortem-best-practices/3DocumentImpact.webp) Impact should be described from a few perspectives: - How long was the impact visible? In other words, what was the length of time users/customers were affected? - Note the length of impact may differ from the length of the response effort. Impact may have started some time before it was detected and incident response began. - How many customers were affected? - Support may need a list of all affected customers so they can reach out individually. - How many customers wrote or called support about the incident? - What functionality was affected and how severely? - Quantify impact with a business metric specific to your product. For PagerDuty this includes event submission, delayed processing, slow notification delivery, etc. ## Analyze the Incident ![Analyze](/images/guides/postmortem-best-practices/4AnalyzeTheIncident.webp) Now that you have an understanding of what happened during the incident, look further back in time to find the contributing factors that led to the incident. Technology is a complex system with a network of relationships (organizational, human, technical) that is continuously changing. In his paper, "[How Complex Systems Fail](http://web.mit.edu/2.75/resources/random/How%20Complex%20Systems%20Fail.pdf)," Dr. Richard Cook says that because complex systems are heavily defended against failure, it is a unique combination of apparently innocuous failures that join to create catastrophic failure. Furthermore, because overt failure requires multiple faults, attributing a "root cause" is fundamentally wrong. **There is no single root cause of major failure in complex systems, but a combination of contributing factors that together lead to failure.** The postmortem owner's goal in analyzing the incident is not to identify the root cause, but to understand the multiple factors that created an environment where this failure became possible. Cook also says the effort to find the "root cause" does not reflect an understanding of the system, but rather the cultural need to blame specific, localized forces for events. Blamelessness is essential for an effective postmortem. **An individual's action should never be considered a root cause.** Effective analysis goes deeper than human action. In the cases where someone's mistake did contribute to a failure, it is worth anonymizing this in your analysis to avoid attaching blame to any individual. Assume any team member could have made the same mistake. According to Cook, "all practitioner actions are actually gambles, that is, acts that take place in the face of uncertain outcomes." The postmortem owner should start their analysis by looking at the monitoring for the affected services. Search for irregularities like sudden spikes or flatlining when the incident began and leading up to the incident. Include any commands or queries used to look up data, graph images, or links from monitoring tooling alongside this analysis so others can see how the data was gathered. If there is not monitoring for this service or behavior, make building monitoring an action item for this postmortem. More on [writing action items](#followup) below. > **Importance of Monitoring:** Puppet's 2018 State of DevOps Report highlights making monitoring configurable by the team operating the service as a foundational practice for successful DevOps. Empowering teams to define, manage, and share their own measurement of performance contributes to a culture of continuous improvement. Another helpful strategy for targeting what caused an incident is reproducing it in a non-production environment. Experiment by modifying variables to isolate the phenomenon. If you modify or remove some input does the incident still occur? This level of analysis will uncover the superficial causes of the incident. Next, ask why the system was designed in a way to make this possible. Why did those design decisions seem to be the best decisions at the time? Answering these questions will help you uncover root causes. Here are some questions to help the postmortem owner identify the class of a particular problem: - Is it an isolated incident or part of a trend? - Was this a specific bug, a failure in a class of problem we anticipated, or did it uncover a class of issue we did not architecturally anticipate? - Was there work the team chose not to do in the past that contributed to this incident? - Research if there were any similar or related incidents in the past. Does this incident demonstrate a larger trend in your system? - Will this class of issue get worse/more likely as you continue to grow and scale the use of the service? > **Tip:** At PagerDuty, we have a separate process for analyzing larger trends across multiple incidents to inform technical and organizational planning. Learn more in our guide on [Operational Reviews](/ops-guides/operational-reviews-guide). Though it may not be a root cause, consider the process in your analysis. Did the way that people collaborate, communicate, and/or review work contribute to the incident? This is also an opportunity to evaluate and improve the incident response process. Consider what worked well and didn't work well within the incident response process during the incident. Write a summary of the findings in the postmortem. The team may find further learnings and identify additional causes through discussion in the meeting, but the owner should do as much pre-work and documentation as possible to ensure a productive discussion. ### Questions to Ask Below is a non-exhaustive list to help stimulate deep analysis. Ask "how" and "what" questions rather than "who" or "why" to discourage blame and encourage learning.
Cues
  • What were you focusing on?
  • What was not noticed?
  • What differed from what was expected?
Previous Knowledge/Experience
  • Was this an anticipated class of problem or did it uncover a class of issue that was not architecturally anticipated?
  • What expectations did participants have about how things were going to develop?
  • Were there similar incidents in the past?
Goals
  • What goals governed your actions at the time?
  • How did time pressure or other limitations influence choices?
  • Was there work the team chose not to do in the past that could have prevented or mitigated this incident?
Assessment
  • What mistakes (for example, in interpretation) were likely?
  • How did you view the health of the services involved prior to the incident?
  • Did this incident teach you something that should change views about this service's health?
Taking Action
  • How did you judge you could influence the course of events?
  • What options were taken to influence the course of events? How did you determine that these were the best options at the time?
  • How did other influences (operational or organizational) help determine how you interpreted the situation and how you acted?
Help
  • Did you ask anyone for help?
  • What signal brought you to ask for support?
  • Were you able to contact the people you needed to contact?
Process
  • Did the way that people collaborate, communicate, and/or review work contribute to the incident?
  • What worked well in your incident response process and what did not work well?
> **Key Takeaways:** * Find contributing factors, not the root cause. > * Focus on the system, not the humans. > * Look for anomalies in monitoring. > * Reproduce and experiment in a non-production environment. > * Don't forget to review your processes. ## Follow-Up Actions ![Followup](/images/guides/postmortem-best-practices/5FollowUpActions.webp) After identifying what caused the incident, ask what needs to be done to prevent this from happening again. Based on your analysis, you may also have proposals to reduce the occurrence of this class of problem, rather than this specific incident from recurring. It may not be possible (or worth the effort) to completely eliminate the possibility of this same incident or a similar incident from happening again, so also consider how you can improve detection and mitigation of future incidents. Does the team need better monitoring and alerting around this class of problem so they can respond faster in the future? If this class of incident does happen again, how can the team decrease the severity or duration? Remember to identify any actions that can make the incident response process better, too. Go through the incident history in Slack to find any to-do items raised during the incident and make sure these are documented as tickets as well. (At this phase, you are only opening tickets. There is no expectation that tasks will be completed before the postmortem meeting.) Create tickets for all proposed follow-up actions in your task management tool. Label all tickets with their severity level and date tags so they can be easily found and reported in the ticketing system. Provide as much context and proposed direction on the tickets as you can so the team's product owner will have enough information to prioritize the task against other work and the eventual assignee will have enough information to complete the task. In the _;login:_ magazine article, "[Postmortem Action Items: Plan the Work and Work the Plan](https://www.usenix.org/system/files/login/articles/login_spring17_09_lunney.pdf)," John Lunney, Sue Lueder, and Betsy Beyer write about how Google writes postmortem action items to ensure they are completed quickly and easily. They advise all action items to be written as actionable, specific, and bounded. - **Actionable:** Phrase each action item as a sentence starting with a verb. The action should result in a useful outcome. - **Specific:** Define each action item's scope as narrowly as possible, making clear what is in and out of scope. - **Bounded:** Word each action item to indicate how to tell when it is finished, as opposed to open-ended or ongoing tasks. | Poorly Worded | Better | |-|-| | Investigate monitoring for this scenario. | **Actionable:** Add alerting for all cases where this service returns >1% errors. | | Fix the issue that caused the outage. | **Specific:** Handle invalid postal code in user address form input safely. | | Make sure engineer checks that database schema can be parsed before updating. | **Bounded:** Add automated presubmit check for schema changes. | Source: _;login:_ Spring 2017 Vol. 42, No. 1. If there are any proposed follow-up actions that need discussion before tickets can be created, make a note to add these items to the postmortem meeting agenda. These may be proposals that need team validation or clarification. Discussing these items in the meeting will help decide how best to proceed. Be careful with creating too many tickets. Only create tickets that are P0/P1s; i.e., tasks that absolutely should be dealt with. There will be some trade-offs here, and that's fine. Sometimes the ROI isn't worth the effort that would go into performing an action that may reduce the recurrence of the incident. When that is the case, it is worth documenting that decision in the postmortem. Understanding why the team is choosing not to perform an action helps avoid learned helplessness. Note the person who creates the ticket is not responsible for completing it. Tickets are opened under the projects for the teams that own the affected service. At least one representative for all teams that will be responsible for a follow-up action are invited to the postmortem meeting. > **Key Takeaways:** * What needs to be done to reduce the likelihood of this, or a similar, incident from happening again? > * How can you detect this type of incident sooner? > * How can you decrease the severity or duration of this type of incident? > * Write actionable, specific, and bounded tasks. ## Write External Messaging ![External](/images/guides/postmortem-best-practices/6WriteExternalMessaging.webp) The goal of external messaging is to build trust by giving customers enough information about what happened and what you're doing about it, without giving away proprietary information about your technology and organization. There are parts of your internal analysis that primarily benefit the internal audience and do not need to be included in your external postmortem. The external postmortem is a summarized and sanitized version of the information used for the internal postmortem. External postmortems include these three sections: 1. **Summary:** Two to three sentences that summarize the duration of the incident and the observable customer impact. 1. **What Happened:** - Summary of cause(s). - Summary of customer-facing impact during the incident. - Summary of mitigation efforts during the incident. 1. **What Are We Doing About This:** Summary of action items. >Tip: Avoid using the word "outage" unless it really was a full outage—use the word "incident" or "service degradation" instead. Customers generally see "outage" and assume the worst. Note that at this point, the external postmortem is drafted language that should not be sent or published. It needs to be reviewed during the postmortem meeting before being sent out. ## Postmortem Review ![Review](/images/guides/postmortem-best-practices/7PostmortemReview.webp) At PagerDuty, we have a community of experienced postmortem writers available to review postmortems for style and content. This avoids wasted time during the meeting. We post a link to the postmortem into Slack to receive feedback at least 24 hours before the meeting is scheduled. Here are some of the things we look for: - Does it provide enough detail? - Rather than just pointing out what went wrong, does it drill down to the underlying causes of the issue? - Does it separate "What happened?" from "How to fix it"? - Do the proposed action items make sense? Are they well-scoped enough? - Is the postmortem well-written and understandable? - Does the external message resonate well with customers or is it likely to cause outrage? Reviewing a postmortem isn't about nitpicking typos (but do make sure the external message isn't littered with spelling and grammatical errors). It's about providing constructive feedback on valuable changes to a postmortem to get the most benefit from them. --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/template # Template A downloadable PDF postmortem template with sections for owner, timeline, contributing factors, and resolution, from the Postmortem Best Practices guide. ![Postmortem Template](/images/guides/postmortem-best-practices/Postmortems-Template.webp) This is a standard template we use for postmortems at PagerDuty. Each section describes the type of information you will want to put in that section. [Download](https://postmortems.pagerduty.com/assets/pdf/PostmortemTemplate.pdf) as a PDF to start using with your team. --- ![Template](/images/guides/postmortem-best-practices/PostmortemTemplate_preview.webp) --- URL: https://docs.pagerduty.com/ops-guides/postmortem-best-practices/what-is-a-postmortem # What Is a Postmortem The basics of Postmortems. Why postmortems are important, when they should be done, and who is responsible for the postmortem. ![What is a Postmortem?](/images/guides/postmortem-best-practices/Postmortems-WhatIs.webp) > What went wrong and how do we learn from it? A postmortem (or post-mortem) is a process intended to help you learn from past incidents. It typically involves a blame-free analysis and discussion soon after an event has taken place. An artifact is produced that includes a detailed description of exactly what went wrong in order to cause the incident, along with a list of steps to take in order to prevent a similar incident from occurring again in the future. An analysis of how effective your incident response process itself was during the incident should also be included in the discussion. The value of postmortems comes from helping institutionalize a culture of continuous improvement. Organizations may refer to the postmortem process in slightly different terms: - Learning Review - After-Action Review - Incident Review - Incident Report - Post-Incident Review - Root Cause Analysis (or RCA) ## Why Do Postmortems During incident response, the team is 100% focused on restoring service. They cannot (and should not) be wasting time and mental energy thinking about how to do something optimally or performing a deep dive on what caused the incident. That's why postmortems are essential—they provide an opportunity to reflect once the issue is no longer impacting users. **The postmortem process drives focus, instills a culture of learning, and identifies opportunities for improvement that otherwise would be lost.** Without a postmortem, you fail to recognize what you're doing right, where you could improve, and, most importantly, how to avoid making the same mistakes in the future. Conducting an effective postmortem allows you to learn quickly from your mistakes and improve your systems and processes. A well-designed, blameless postmortem allows teams to continuously learn, serving as a way to iteratively improve your infrastructure and incident response process. Be sure to write detailed and accurate postmortems in order to get the most benefit out of them. ## When to Do a Postmortem **Do a postmortem for every major incident** (Sev-2/1). This includes **any time incident response is triggered**—even if it is later discovered that severity was actually lower, it was a false alarm, or it quickly recovered without intervention. A postmortem should not be neglected in these cases because it is still an opportunity to review what did and did not work well in the incident response process. If the incident should not have triggered incident response, it is worthwhile understanding why it did so monitoring can be tuned to avoid unnecessarily triggering incident response in the future. Doing this analysis and follow-up action will help prevent alert fatigue going forward. Postmortems are done shortly after the incident is resolved, while the context is still fresh for all responders. Just as resolving a major incident becomes top priority when it occurs, completing the postmortem is prioritized over planned work. Completing the postmortem is the final step of your incident response process. Delaying the postmortem delays key learning that will prevent the incident from recurring. **PagerDuty's internal policy for completing postmortems is 3 calendar days for a Sev-1 and 5 business days for a Sev-2.** Because scheduling a time when everyone is available can be difficult, the expectation is people will adjust their calendars to attend the postmortem meeting within this timeframe. ## Who Is Responsible for the Postmortem At the end of a major incident call, or very shortly after, the [Incident Commander](/ops-guides/incident-response-guide/incident-commander) selects and directly notifies one responder to own the postmortem. Note that the postmortem owner is not solely responsible for completing the postmortem themselves. **Writing a postmortem is a collaborative effort** and should include everyone involved in the incident response. While engineering will lead the analysis, the postmortem process should involve management, customer support, and business communications teams. The postmortem owner coordinates with everyone who needs to be involved to ensure it is completed in a timely manner. It is important to designate a single owner to avoid the bystander effect. If you ask all responders or a team to do the postmortem, you risk everyone assuming someone else is doing it, and therefore, no one does. When selecting an owner you may choose a single individual who meets any of the following criteria: - Took a leadership role investigating during the incident - Performed a task that led to stabilizing the service - Was the primary on-call responder for the most heavily affected service - Manually triggered the incident to initiate incident response Doing the postmortem is not a punishment, and the owner is not the person that "caused" the incident. Effective postmortems are blameless. In complex systems there is never a single cause, but a combination of factors that lead to failure. The owner is simply an accountable individual who performs select administrative tasks, follows up for information, and drives the postmortem to completion. Writing the postmortem will ultimately be a collaborative effort, but selecting a single owner to orchestrate this collaboration helps ensure it is done. --- URL: https://docs.pagerduty.com/ops-guides/retrospectives # Retrospectives Having retrospectives on a regular basis is one way for your team to learn what they're doing right, where they can improve, how to avoid making the same ![PagerDuty](/images/guides/retrospectives/Retros-Title.webp) Having retrospectives on a regular basis is one way for your team to learn what they're doing right, where they can improve, how to avoid making the same mistakes again and again, and, most importantly, how to critically think about how they're working together. Well-designed retrospectives allow teams to iteratively improve their end product and collaboration process. The concept of having retrospectives is well known in the technology industry, but it can be difficult for newer individuals, teams, and organizations to adopt the mindset required to execute effective for effective retrospectives. This guide will teach you how to build a culture of continuous improvement, the most important components to include in your retrospectives, and how to conduct effective retrospectives. ## Who Is This For? This resource is for team members working in any industry who want to iteratively learn from their team's working processes and behaviors, and for leaders who want to cultivate a culture of continuous improvement within their organization. ## What Is Covered? ### What is a retrospective? The who, what, when, and why of [retrospectives](/ops-guides/retrospectives/getting-started). This section also includes a look at how retrospectives [differ from postmortems](/ops-guides/retrospectives/getting-started#the-differences-between-retrospectives-and-postmortems). ### Planning the retrospective A successful retrospective requires some degree of planning by the facilitator. This section outlines factors the facilitator should take into consideration at this stage. - [Who's the Retrospective Audience?](/ops-guides/retrospectives/planning#whos-the-retrospective-audience) - [Audience Size](/ops-guides/retrospectives/planning#audience-size) - [Choosing a Retrospective Style](/ops-guides/retrospectives/planning#choosing-a-retrospective-style) - [Facilitating Retrospectives Based on Team Member Locations](/ops-guides/retrospectives/planning#facilitating-retrospectives-based-on-team-member-locations) ### During the Retrospective You'll learn how the facilitator and participants are involved at different phases of the retrospective. - [Setting the Stage](/ops-guides/retrospectives/during#setting-the-stage) - [Gathering Data](/ops-guides/retrospectives/during#gathering-data) - [Generating Insights](/ops-guides/retrospectives/during#generating-insights) - [Deciding on Action](/ops-guides/retrospectives/during#deciding-on-action) - [Closing the Retrospective](/ops-guides/retrospectives/during#closing-the-retrospective) - [Timeboxing the Retrospective](/ops-guides/retrospectives/during#timeboxing-the-retrospective) ### After the Retrospective What to expect after the retrospective is complete. - [Gathering Feedback From Participants](/ops-guides/retrospectives/after#gathering-feedback-from-participants) - [Following Up On Action Items](/ops-guides/retrospectives/after#following-up-on-action-items) ### Training for the Facilitator Information for retrospective facilitators and facilitators-in-training. - [Prerequisites](/ops-guides/retrospectives/facilitator-training#prerequisites) - [Responsibilities](/ops-guides/retrospectives/facilitator-training#responsibilities) - [Training Process](/ops-guides/retrospectives/facilitator-training#training-process) - [Graduation](/ops-guides/retrospectives/facilitator-training#graduation) - [Pocket Reference Guide](/ops-guides/retrospectives/facilitator-training#pocket-reference-guide) ### Additional Resources Links to other helpful retrospective facilitation [tips and tools](/ops-guides/retrospectives/additional-resources). ## License This documentation is provided under the Apache License 2.0. In plain English that means you can use and modify this documentation and use it both commercially and for private use. However, you must include any original copyright notices, and the original LICENSE file. Whether you are a PagerDuty customer or not, we want you to have the ability to use this documentation internally at your own company. You can view the source code for all of this documentation on our GitHub account, feel free to fork the repository and use it as a base for your own internal documentation. --- URL: https://docs.pagerduty.com/ops-guides/retrospectives/additional-resources # Additional Resources Curated links to retrospective facilitation techniques, probing question guides, and remote retro formats from outside authors. ![PagerDuty](/images/guides/retrospectives/Retros-Resources.webp) - [Retrospective Techniques for Coaches, Scrum Masters, and Other Facilitators](https://trello.com/b/40BwQg57/retrospective-techniques-for-coaches-scrum-masters-and-other-facilitators) (Philip Rogers) - [Pocket Guide to Probing Questions](http://schoolreforminitiative.org/doc/probing_questions_guide.pdf) (School Reform Initiative) - [Remote Retrospective Using Lean Coffee](https://theagileist.wordpress.com/2019/01/31/remote-retrospective-using-lean-coffee/) (The Agileist) - [Sailboat Retrospective](https://retrospectivewiki.org/index.php?title=Sailboat) (Retrospective Wiki) - [Speed Car Abyss Retrospectives](http://www.funretrospectives.com/speed-car-abyss/) (Fun Retrospectives) - [Postmortems Guide](/ops-guides/postmortem-best-practices) (PagerDuty) --- URL: https://docs.pagerduty.com/ops-guides/retrospectives/after # After The Retrospective The facilitator may choose to spend the last couple minutes of the retrospective gathering real-time feedback from the team. Teams call this a "retro on the ![PagerDuty](/images/guides/retrospectives/Retros-After.webp) ## Gathering Feedback From Participants The facilitator may choose to spend the last couple minutes of the retrospective gathering real-time feedback from the team. Teams call this a "retro on the retro." Questions intended for the facilitator to solicit feedback from team members on the retrospective include: - "Did the retrospective style work well?" or "Do you prefer retrospective style A or B?" - "Was there sufficient structure to the retrospective?" - "Did you feel included in the discussion?" ## Following Up On Action Items It's important to follow up on action items with the team to see what progress was made towards fixing the issues they identified. The facilitator can follow up on action items at the team's next scheduled retrospective. However, if there is a significant time gap until the next retrospective (e.g., a month or more), the team lead can follow up on the action items at the team's next full team meeting. **If no progress was made on a previously determined action item, it’s important for the team to identify why progress didn’t happen without assigning blame.** From there, the team can make a more conscious effort to enact the action item going forward, redefine, or clarify the action item, or even scrap it completely if the issue has disappeared on its own. Read up on moving your organization towards a blameless culture [here](/ops-guides/postmortem-best-practices/blameless-postmortem#how-to-cultivate-a-blameless-or-blame-aware-culture). --- URL: https://docs.pagerduty.com/ops-guides/retrospectives/during # During The Retrospective At the beginning of a retrospective, the facilitator welcomes the team to the retrospective and reminds the team of its purpose, which sets the tone and ![PagerDuty](/images/guides/retrospectives/Retros-During.webp) ## Setting The Stage At the beginning of a retrospective, the facilitator welcomes the team to the retrospective and reminds the team of its purpose, which sets the tone and direction for the session. It's important to stimulate participation from everyone in the beginning of the retrospective. This encourages the team to feel more comfortable speaking later in the session. We recommend running a quick icebreaker activity to kick off the retrospective. Some activities that facilitators have found success with include: - **One Word.** Ask each team member to write down a one-word description of how they feel about the current work cadence/project. - **One Image.** Ask each team member to share one picture, graphic, GIF, emoji, etc., symbolizing how they feel about the current work cadence/project. - **Five Stars.** Ask each team member to express their feelings about the current work cadence/project on a scale of 1 to 5, where: | Star Rating | Star Definition | |---|---| | 5 | I think we're the best team on the planet! We work great together. | | 4 | I'm glad to be a part of the team and am satisfied with how we work together. | | 3 | I'm fairly satisfied. We work well together most of the time. | | 2 | I have some moments of satisfaction but not enough. | | 1 | I'm unhappy and dissatisfied with our level of teamwork. | ## Gathering Data This is when the facilitator asks the team open-ended questions to gather insights, based on their chosen retrospective style. For example, common guiding questions used by retrospective facilitators may include (but are not limited to): - What went well? - What didn't go so well? - What did you learn? - What did you have questions about or are still confused about? Since engineering teams may be primarily distributed, the facilitator typically does this using a remote-friendly collaboration tool. An example using Trello is shown below. ![Data Gathering Example](/images/guides/retrospectives/data_gathering_example.webp) For retrospectives with a larger audience, the facilitator can consider sending the Trello board and instructions in advance. This gives team members more time to prepare, reflect, and document thoughts. ## Generating Insights During this time, the team discusses the topics and data they gathered in the previous phase. **If the team identified more topics to discuss than there is sufficient time allocated in the retrospective, use a voting technique to prioritize topics.** For example, using the collaboration tool Trello, here are some ways to conduct voting: - The facilitator enables the **Voting** power-up on the team's retrospective board. Then, they verbally allocate a number of votes to each team member and give the team a few minutes to vote. During the discussion, the facilitator guides the team in discussing the topics with the highest number of votes. With this method, team members can only vote once per discussion topic. - The facilitator verbally allocates a number of votes to each team member and gives a few minutes for the team to vote by using stickers. During the discussion, the facilitator guides the team in discussing the topics with the highest number of votes. With this method, team members can vote multiple times for a discussion topic by placing multiple stickers on a card. ## Deciding on Action The facilitator's goal is to help the team identify areas of focus and create action items. **The team should focus on things that they can improve and have control over while creating their own action items.** When the team is deciding on what action(s) to take, the facilitator can walk the team through these questions: - What can we do to improve a bad situation? - Is there a good situation that can be made better? - Is there a good situation we can replicate to do more good in another area of our work? This phase of the retrospective is also the time to brainstorm solutions and changes to team processes, which may include changes to team working agreements, team explicit policies, or other team process documentation. Based on the action items decided by the team, the team should also assign owners to the action items themselves to drive accountability. **Remember to document the action items so the team can easily access them and follow up on them in the future.** For example, teams can record their action items in their retrospective collaboration tool (e.g. Trello, Confluence). We'll discuss this more in the [Following Up On Action Items](/ops-guides/retrospectives/after#following-up-on-action-items) section. ## Closing the Retrospective This is the time for the facilitator to formally conclude the retrospective by thanking the team for their time and thoughts, as well as recapping the key topics of discussion and the action items the team has decided to enact. This time is also perfect for the facilitator to review team members' appreciations for each other. ## Timeboxing the Retrospective "Timeboxing is allotting a fixed, maximum unit of time for an activity. **The goal of timeboxing is to define and limit the amount of time dedicated to an activity."**1 The benefits of timeboxing include: - Forcing prioritization. - Avoiding unnecessary perfectionism. As is often said, "Don't let great get in the way of good." - Driving discussion to closure or action. Refer to the [best practices](/ops-guides/retrospectives/planning#retrospective-agenda-best-practices) for determining the duration of and timeboxing activities within a retrospective. --- 1. [https://resources.scrumalliance.org/Article/timeboxing-scrum](https://resources.scrumalliance.org/Article/timeboxing-scrum) --- URL: https://docs.pagerduty.com/ops-guides/retrospectives/facilitator-training # Training For The Facilitator Good facilitators tend to have a high level of emotional intelligence. This means they can easily read others' non-verbal cues to understand how individuals ![PagerDuty](/images/guides/retrospectives/Retros-Training.webp) ## Prerequisites Good facilitators tend to have a high level of emotional intelligence. This means they can easily read others' non-verbal cues to understand how individuals feel. They use this sense to cultivate an environment where everyone is comfortable speaking. Larger organizations may even have a guild of confident retrospective facilitators who coach individuals interested in learning how to facilitate retrospectives. These individuals include, but are not limited to, agile coaches, engineers, and project managers. When searching for individuals in your organization to help facilitate retrospectives, look for those with these core competencies: - Ability to read non-verbal cues to assess how people are feeling in the room to see who might have something to say. - Can paraphrase what is said to clarify for self and others. - Asks open-ended questions to stimulate deeper thinking. - Is comfortable interrupting when discussion gets off track or someone dominates the discussion. - Redirects discussion to focus on the team's goals. - Keeps track of time and gives team members time reminders. - Drives the discussion to making decisions and action items. Retrospective facilitators do not need to be experts in the attending team's processes. They do not need to be well-versed in the content of the discussion. **Remember, the facilitator does not contribute their own opinions about the discussion but works to get participants to think and speak.** The retrospective participants are the experts on their work, and the facilitator asks the right questions to encourage them to share information with the team. The facilitator should, however, be familiar with the retrospective process and the goals of the retrospective so they can guide the team's discussion to achieve set goals. ## Responsibilities Read up on the [role of the retrospective facilitator](/ops-guides/retrospectives/getting-started#role-of-the-facilitator) to see what is expected from them. ## Training Process The process for training retrospective facilitators is constantly evolving. Here are things you can do to get started on developing your retrospective facilitation skills: - **Read this guide!** - Set up one-on-one time with an experienced retrospective facilitator in your organization to ask them questions. - Shadow a retrospective to see how it's run. - During the retrospective, observe and write down any questions you have for the facilitator. - After the retrospective, have a debrief with the facilitator. Ask them your questions, focusing on understanding: - Why the facilitator posed certain questions to retrospective participants. - Why the facilitator gave the team more time to discuss some topics over others. - Reverse shadow a retrospective facilitator. - Facilitate the retrospective to the best of your ability. - The experienced facilitator will also be there to support you if needed. ## Graduation Once you're comfortable facilitating retrospectives independently, congratulations—you may now call yourself a retrospective facilitator! Don't forget to inform teams requiring a retrospective facilitator that you're now available to support them. ## Pocket Reference Guide Every retrospective is different, but there's a common process you can apply to each one. ![Facilitating Retros](/images/guides/retrospectives/facilitating_retrospectives.webp) ### Set the Stage Setting the stage involves establishing the purpose of the retrospective and warming the participants up for discussion. This preparation step will encourage every participant to participate later during the retrospective. 1. Remind the participants why they're here. Say "The purpose of today's retrospective is to discuss what went well and what we could have done differently during the most recent work cadence/project X/etc." 1. Warm up the participants for discussion. Ask "What's one word or one image to describe how you feel about the most recent work cadence/completed project?" Taking turns, each participant shares their sentiment and a brief explanation of their rationale. ### Gather Data The next step is to gather data about the retrospective focus from the participants. This is an information-gathering step that reminds the participants of what they've recently come across in their work. 1. Give participants individual brainstorming time. Say "Take X minutes to answer the guiding questions on Trello cards/sticky notes." 1. Check in with the participants near the end of the timebox for brainstorming. Ask "We have X minutes left. Do you need a couple more minutes?" ### Generate Insights After gathering the participants' data, it's time for them to discuss their topic/discussion ideas in more detail. 1. Gather additional, relevant context from participants. Ask "Can you provide additional context behind what you've written on this Trello card/sticky note?" or "Why did this experience make you feel the way it did?" 1. Stimulate deeper discussion about a topic as you deem appropriate. Ask the participants [probing questions](http://schoolreforminitiative.org/doc/probing_questions_guide.pdf). ### Decide on Action Once the participants have generated insights, they need to decide on what action to take to address their concerns and determine ownership of these actions. 1. Shepherd the participants towards finding a few changes they can focus on. Ask: - "What can we do to improve a bad situation?" - "Is there a good situation that can be made better?" - "Is there a good situation we can replicate to do more good in another area of our work?" 1. Document the action items generated by the participants. Make sure they're visible to the participants. If you're facilitating the participants' next retrospective, be sure to follow up on these action items to see what progress was made toward addressing the issue(s). 1. Remind the participants to assign ownership to each action item they generate. Ask "Who will own this action item?" This holds the team accountable to accomplish what they had set out to do. ### Close the Retrospective After action items have been determined and assigned, the facilitator wraps up the retrospective. 1. Thank the participants. Say "Thanks for everyone's time and participation." 1. Recap key information from the retrospective. Say "We discussed these major topics today and decided to carry out these action items." 1. Review participants' appreciations for each other. Say "We'll go through everyone's appreciations one at a time now. When we get to your Trello card/sticky note, read your thank-you message aloud." --- URL: https://docs.pagerduty.com/ops-guides/retrospectives/getting-started # Getting Started A retrospective is a structured meeting that typically runs for 60 to 120 minutes on a biweekly cadence or after completing a large-scale project. It allows ![PagerDuty](/images/guides/retrospectives/Retros-GettingStarted.webp) ## What's a retrospective? A retrospective is a structured meeting that typically runs for 60 to 120 minutes on a biweekly cadence or after completing a large-scale project. It allows teams the opportunity to examine themselves and create a plan to improve how they work together moving forward. A retrospective is meant to create a safe space for team members to share their honest feedback about what’s going well for the team and what could be improved. Retrospectives generate discussions around how to improve team collaboration, with actionable items that are documented and can be followed up on in the future (e.g., in the next retrospective). ## Why have retrospectives? > **Tip:** Retrospectives help a team establish a practice of continuous improvement of their interactions and processes. This is achieved through reflecting on "how" a team delivers versus "what" the team delivers. **Retrospectives create transparency and trust.** They compel a team to discuss both problems and success stories. Being honest and transparent about the good, the bad, the ugly, and everything in between builds trust among team members. **Retrospectives enable the team to discover risks early.** They allow the team to uncover blockers as early as possible. If team members feel comfortable, they will raise concerns sooner rather than later, giving the team more time to react. **Retrospectives empower team members.** Team members define and own their actionable items and changes. Since team members are empowered to act on collective decisions, there will be little resistance to follow through on these changes. Thus, this gives power back to the team. ## Who's involved? ![Who's Involved](/images/guides/retrospectives/whos_involved_in_a_retro.webp) ### Role of the Facilitator The facilitator’s role in the retrospective is different from the other participants. The facilitator does not voice their own ideas in the meeting. They encourage the group to speak up and keep the discussion on track. This requires enough cognitive load to make it difficult to perform this role well and attempt to contribute personal thoughts to the discussion. For a successful retrospective, it is helpful to have a designated facilitator that is not also trying to participate in the discussion. The role of the facilitator is to: - Serve the team objectively. - Encourage people to speak up and ensure everyone is heard. - Clarify insights and challenge the team with thought-provoking questions. - Help the team see different perspectives and different options. - Keep everyone on time and on track. Cut off tangents and stop people from dominating the entire meeting. - Be the champion for continuous improvement. - **Try to speak as little as possible.** The facilitator should be a shadow that guides discussions, not a presenter who takes over the meeting. If the facilitator dominates the retrospective, this runs the risk of the team not paying attention and falling silent. The facilitator does NOT: - Make decisions. - Take sides. If the facilitator takes sides, team members might feel attacked and might stop contributing to the meeting. Do not comment on what people say, even if you are trying to give positive feedback. You can find [additional facilitation tips in our Postmortems Ops Guide](/ops-guides/postmortem-best-practices/postmortem-meeting#facilitation-tips). ### Role of the Participants The role of participants is to: - Speak up and voice their ideas. They should be involved in the discussion. - Come up with action items. - Be receptive to ideas different than their own. - Work with the facilitator to generate insights about the team, come up with alternative options, and challenge their own or their team’s underlying assumptions. Participants do NOT: - Dominate the meeting. - Convince their colleagues to change their perspectives. ## The Differences Between Retrospectives and Postmortems You may have already read PagerDuty’s [Postmortems Ops Guide](/ops-guides/postmortem-best-practices) and may be wondering how a retrospective is different from a postmortem. Postmortems are also structured meetings that provide teams with an opportunity to reflect, but they differ in several important ways. The biggest difference is meeting purpose: postmortems are for reflecting on the response to an incident, while retrospectives allow teams to reflect on their progress, pace, and delivery on a regular cadence. Key differences are summarized in the following table: | Aspect | Postmortem | Retrospective | |---|---|---| | Purpose | To conduct analysis on the incident, including: identifying superficial and contributing factors, considering technology and process, and obtaining buy-in for action items. | To facilitate and encourage continuous improvement at regular cadences. To review a team’s progress, pace, and delivery. To think of ways to improve team collaboration. To have a safe space where the team can discuss anything that affected their work over the last cadence. To get a “health check” or “temperature reading” of how the team felt over the last cadence. | | When it occurs | After an incident | Typically at a regular cadence (e.g. every 2 weeks) | | Style | Discussion between the teams directly involved with the incident. A sample incident postmortem agenda can be found [here](/ops-guides/postmortem-best-practices/postmortem-meeting#agenda).| Typically, an informal discussion between team members. Can be facilitated through a wide variety of styles. | | Discussion Topics | Review a summary of the postmortem report, which details incident contributing factors, timeline, resolution action taken, customer impact, etc. | Reflections on areas of strength and areas for improvement, the team’s sentiments over the last cadence, and surface areas of concern or questions. | | Who participates | The Incident Commander, Incident Responders, Subject Matter Experts involved, Service Owners, Engineering Manager(s) of impacted systems, etc | The team. Any other necessary roles. Minimize the number of unnecessary attendees. Avoid having management present. | --- URL: https://docs.pagerduty.com/ops-guides/retrospectives/next-steps # Next Steps At this point you may be wondering: what next? Time to have your first retrospective! Before you start, there are a few housekeeping items you should take care ![PagerDuty](/images/guides/retrospectives/Retros-NextSteps.webp) ## Your First Retrospective At this point you may be wondering: what next? Time to have your first retrospective! Before you start, there are a few housekeeping items you should take care of in advance of the meeting: - What tools to use - Rules of engagement - Roles: Who will facilitate and who will take notes There are several tools to use, which will be guided in part on whether or not your retrospective is in a single conference room or if it's hybrid/fully remote. If you are in a single room, you can easily use physical tools like pens, markers, paper, whiteboards, etc. However, if you have at least one person remote, you need to shift to digital tools so that the remote person or persons can participate without barriers. This will mostly be digital replacements for brainstorming or whiteboarding—e.g. Google Jamboards if you have the Google Suite, or Stormboard, Trello, and anything similar. It is best to use a tool that is either already in use at your company or that is a component of a product suite that is already owned to help ensure that everyone has access, even outside of your team. After the meeting you will need to choose a common tool to store your notes for future reference. Rules of engagement are essential for helping the meeting stay on track. Simply put: Giving feedback is hard and giving constructive criticism is harder than positive feedback, so it is essential to have some ground rules that will help people open up, as well as keep the discussion moving if a topic on the list starts to warrant more discussion than there is time for. It also helps to know how and when to provide your own feedback if you're waiting for someone else to finish theirs—especially if you're remote, where you may not see each other either due to cameras not being on or due to the number of tiles to keep track of / someone not being the active speaker. Beyond that, the rules of engagement for the retrospective can include an upper bound to how much time will be spent per topic and how to override that time limit. If you need to override, make sure to include what other topic(s) will have less discussion time to prevent lengthening the overall meeting. To help you get started thinking about this and other concerns for streamlining the meeting, [here's a blank template](https://docs.google.com/presentation/d/1N4mAtI9Yaw1ZX0AkkyStJ41HwDgj__Kg3tQQgMHo1SA/edit#slide=id.g7c38cb8f37_0_2260) based on the PagerDuty Community Team's rules of engagement. Lastly, before the meeting, indicate who will facilitate and who will take notes. Ideally, these roles will be spread across the team. Even if some members of your team are better at one task or the other, it's important to give everyone a chance to learn and grow as part of the retrospective process. If volunteering (or voluntelling) doesn't work or leads to imbalance, try to rotate by forename or surname. What these two roles entail should be rolled into the rules of engagement at least for how they apply to the retrospective in particular. ## The Meeting At long last, the meeting itself! To recap the [purpose of the meeting](/ops-guides/retrospectives/during), you and your team should answer the following questions: 1. What went well 1. What didn't go well 1. What did you learn 1. What questions you still have Note that this is different from postmortems, but only slightly, as the scope is broader. Assuming an hour-long meeting (adjust if for more or less time), your agenda should have: - A (brief!) icebreaker: ~5 min - Brainstorming time: ~10 min - Triage: ~5 min - Discussion: ~25 min - Moving forward / next steps: ~10 min - Feedback / appreciations: ~5 min The icebreaker above isn't meant to be like what we associate with the types of icebreakers we get to know each other better, usually via onboarding and so forth. The purpose is mainly to get people talking or moving before getting to the brainstorm and feedback phases so that they're already in that state of mind. It could be a round of [Among Us](https://en.wikipedia.org/wiki/Among_Us) or the [Keep Talking Game](https://keeptalkinggame.com/)—anything low stress that involves a lot of conversation. (Due to game length, if you choose one of these games make sure to have a timer as you likely won't finish in ~5 minutes.) For brainstorming: This is where you'll use whiteboards, sticky notes, etc., to start writing down top-level ideas and putting them in the correct areas. For example, if you're using Trello, you could have a column for each of the four questions, with people popping their idea cards in the correct column. People should only pay loose attention to each other's ideas— duplicates and ideas that should be merged can be handled in the triage phase. When you are ready for the triage phase, keep it as simple as possible and err on the side of caution. It may be quickest to resolve any obvious duplicates, and then move on to merging tickets as that may require (light) discussion. It's better to quickly "yay" or "nay" a merge than to spend time discussing it during the triage phase—more merges or deletes may come up during the main discussion. Before proceeding to the discussion phase, you should rank the ideas according to some consistent metric, usually either by guestimating the time needed to discuss as "short," "long," or "in between," or by relative importance and/or urgency. Now to discuss! When you are going through the idea tickets [remember](/ops-guides/retrospectives/during) to ask: - How can we better support went well - How can we improve what did not go well - How can we apply what went well to what did not go well For that last point, the idea is to try and apply the habits and processes that are successful to areas that are currently unsuccessful, where it makes sense to do so. Try to spend the approximate amount of time you agreed on in the triage phase discussing any topic to minimize any topics that will need to be covered elsewhere, either async via chat, in the next meeting, and so forth. It's important to try to avoid topic overflow because this can cause retrospectives to become quickly overwhelming. That said, please remember to extend yourselves and your teammates grace while they learn, especially when adjusting to new practices. LucidChart has an excellent [blog post](https://www.lucidchart.com/blog/what-is-timeboxing) on how to implement timeboxing to your meetings. At the end of the day, well, meeting—let's hope it's not a day!—you will need a few action items to try and see if positive change results. Make sure that these action items are in your notes post-meeting. If you would like a note template to get started from, we have one [here](https://docs.google.com/document/d/19M93owg0sNV2n0fDg2JlhS9Z33zi1QDaWd7RJUq9o6k/edit#). Note that you should start documenting your jargon early for anyone else that needs read access to your documents. It's easier to have common terms at the top of each, even if you're copying them from each previous document to the next, so that readers don't need to dive through separate documentation to understand your meeting notes. In terms of visibility, we've found it easier to include the **Action Items** _above_ the freeform **Notes**. And that's it! It's important to take time at the end of each meeting for feedback. The meetings will need to be customized with you as you learn and discover what fits your changing needs best. So at the end of each meeting, get feedback from the team. How did they feel about the process? What could be adapted or removed to make it more effective? What could be adapted or removed to help them feel more comfortable sharing their feedback, especially if they were uncomfortable during the meeting? --- URL: https://docs.pagerduty.com/ops-guides/retrospectives/planning # Planning The Retrospective Before having a retrospective, it's important for you to identify who the retrospective is meant to be tailored to. This section provides guidelines around ![PagerDuty](/images/guides/retrospectives/Retros-Planning.webp) ## Who's the Retrospective Audience? Before having a retrospective, it's important for you to identify who the retrospective is meant to be tailored to. This section provides guidelines around having a retrospective for a team after a major project is completed or after an event. ### Team Retrospective Team retrospectives occur at a regular cadence (e.g. biweekly). While working on a project, regularly cadenced retrospectives give the team an opportunity to inspect what went well and what didn't go so well. From there, teammates work together to create and execute on an improvement plan. ### Project, Project Milestone, or Event Retrospective The team(s) involved in completing a project, project milestone, or running an event (e.g., company conference) may want to have a retrospective to reflect on what went well and what didn't go so well throughout their progress on the project. This retrospective is more holistic in nature and enables the involved team(s) to consider the good, the bad, and everything in between, from a macroscopic view. Thus, it's recommended for the involved team(s) to have regularly cadenced retrospectives and one final retrospective to reflect on the entire deliverable from beginning to end. ## Other Factors to Consider ### Audience Size Sometimes, the facilitator may have to run a retrospective involving larger teams. An example of this is an entire project team consisting of multiple delivery teams. In this scenario, the facilitator may also focus on a longer timeframe than the usual project delivery timelines. > **One of the biggest challenges in effectively running a retrospective for a large team is ensuring all voices are heard. Consider breaking the large group into smaller groups to run mini-retrospectives. Later in the retrospective, the facilitator can combine the data and distribute the findings to everyone.:** Before the retrospective, the facilitator should consider letting the team document topics of discussion they would like to explore during the retrospective. This gives the team additional reflection time and may make time for more discussion during the retrospective. Below is a sample template for the [Lean Coffee](https://www.learningapprentice.com/lean-coffee-retrospective/) style of retrospective. The topmost card in each column provides clear instructions to team members, especially if the facilitator decides to send the retrospective board to the team beforehand. ![Retro Board](/images/guides/retrospectives/retro_board_example.webp) During the retrospective, keep in mind that the larger the group, the more topics there are to discuss. Organize discussion topics by removing duplicates and combining those that are thematically similar. ### Choosing a Retrospective Style Some retrospective styles are more appropriate for certain situations than others. The following are some ideas of retrospective styles and general best practices on when they are the most appropriate: | Retrospective Style Name | When Should I Use This Style? | Description | |---|---|---| [Lean Coffee Retrospective](https://www.learningapprentice.com/lean-coffee-retrospective/) | Anytime! | This simple style is useful when the facilitator wants the team to have an open-ended conversation that is entirely owned and directed by the team. [Sailboat Retrospective](https://retrospectivewiki.org/index.php?title=Sailboat) | For conducting project retrospectives when the team has more than just 2 weeks' worth of data. | This style helps the team to define a vision of where they want to go, identify risks along the path, and identify what inhibits and aids them to achieve their objectives. [Speed Car Abyss Retrospective](http://www.funretrospectives.com/speed-car-abyss/) | For reflecting on the past and looking forward. It's especially useful when used a few weeks before a team's milestone or release. | This style is a mix of a retrospective and futurespective to uncover risks. Links to more retro styles and instructions for the facilitator can be found [here](/ops-guides/retrospectives/additional-resources). ### Facilitating Retrospectives Based on Team Member Locations Since there are slight nuances between facilitation of a co-located and a distributed team, here are some tips and tricks to help you get through your retrospective as smoothly as possible, no matter where team members are located. #### Co-located Teams While facilitating a retrospective for a co-located team: - **Be mindful of your position in the room. Your physical presence can help drive the discussion one way or another.** For example, if you want to get the team's attention, you can stand up. If you don't want to be involved in a discussion topic, you can pull yourself away from the rest of the team to take an observational stance. - **Find a suitable space—location, location, location!** - Make sure everyone can fit in the room comfortably. - Pick a room that isn't too hot or cold. - Consider changing the space periodically to ensure team members don't start attaching their emotions to a room or priming themselves. #### Distributed Teams While facilitating a retrospective for a distributed team: - **Ensure any tools for gathering retrospective insights (e.g. Trello board) are visible to the whole team.** - **Ensure the team is aware of screen sharing, camera, and microphone etiquette.** - Facilitators should share their screen with the team. - Facilitators should share their camera so participants can see them - Participants don't always have to be on camera, but when they're speaking they should try to be. - Participants should mute unless they're about to speak. #### Any Teams While facilitating a retrospective for any team: - **Use a timer to timebox.** This makes everyone aware of the time limit. Consequently, you won't have to interrupt or cut anyone off. - For a **co-located team**, you may consider using a physical timer that is visible to all team members in the room. - For a **distributed team**, you may consider using a browser extension that is visible to the full team ( via screen-sharing). - **Begin the retrospective by going through an icebreaker activity.** This reduces team tension and gets people in a more talkative mood. Examples of icebreaker activities: Two truths and a lie, first job, fun fact, a country you'd like to visit, etc. - Set ground rules at the beginning of the retrospective, such as: - Don't interrupt people - Decide on and say a "safe word" when the discussion gets off topic - Everyone should speak up but no one should dominate the discussion.1 ## Setting the Retrospective Agenda The goal of establishing an agenda for the retrospective is to ensure the entire team is aligned on what they want to get out of the retrospective and what activities they will do to meet the intended outcome. Each activity is assigned a timebox. A timebox is a fixed, maximum unit of time for an activity. The goal of timeboxing is to define and limit the amount of time dedicated to an activity. The benefits of timeboxing include: - Forcing prioritization - Avoiding unnecessary perfectionism - Motivating closure on discussion topics ### Retrospective Agenda: Best Practices For a small-to-average sized team (between 5-9 people), the retrospective has a total timebox of 60 minutes. For a larger team, the retrospective has a total timebox of 90 minutes. In any case, if the team has more topics to discuss, the retrospective can be extended. These are suggested timeboxes for activities within a 60-minute retrospective: - [10 minutes] Reviewing the team's metrics - [5-10 minutes] Idea generation for discussion topics - [2 minutes] Team votes on which topics to discuss - 5 minutes per discussion topic, with an additional 3 minutes per topic at the team's discretion - [5 minutes] Teammates give each other appreciations2 for a job well done If at any point, the team completes an activity before the end of its allotted timebox, the facilitator can step in and propel the team onto the next activity or discussion topic. --- 1. Some teams have found success with having the role of "accountabilibuddy" on the team, whose job is to remind the team of a team agreement, especially when the team is at risk of breaking it. 2. Appreciations are thank-you messages teammates write to each other to acknowledge the team member(s) who helped their colleagues get things done or to recognize team members who went above and beyond in their work. For example, appreciations can be read aloud by their writers before the facilitator concludes the retrospective. This boosts team morale, especially after an emotionally charged retrospective discussion, and reminds the team of all the good they've accomplished. --- URL: https://docs.pagerduty.com/ops-guides/security-training # Security Training This site contains the open-source versions of PagerDuty's internal employee security training courses. It contains all of the public materials for our ![](/images/guides/security-training/security-training-icon.svg) This site contains the open-source versions of PagerDuty's internal employee security training courses. It contains all of the public materials for our courses, including PDF exports of the slides, and the original [Keynote](https://www.apple.com/keynote/) files so you can adapt them more easily for your own organizations. We run two types of internal employee security training courses; one [for everyone](#security-training-for-everyone) covering a variety of general security topics relevant to all employees, and one [for engineers](#security-training-for-engineers) covering more technical security concepts relevant to those in our engineering org. To learn more about the philosophy behind our security training program, and why we decided to build our own, you can read "[Our Approach to Employee Security Training](https://www.pagerduty.com/blog/security-training-at-pagerduty)", which provides more insights and background into our training program. > **Note:** _These are training sessions that we have developed in-house and deliver ourselves. Your mileage may vary as to how useful they are for your own organizations. It is our hope that at the very least they can provide some insight into how we deliver our internal training and help you to develop your own training programs._ ## Security Training For Everyone Our "For Everyone" course covers a variety of general security topics relevant to all employees. It is delivered annually to all PagerDuty employees, contractors, and interns. Since 2018 we have produced a new "part" each year in order to keep the material fresh for employees who have already been through the training. The overall lessons are the same, but we dive deeper into different topics each year. Click the slides below to view the relevant course, starting with ["For Everyone" in 2018](/ops-guides/security-training/for-everyone), then ["For Everyone Part II" in 2019](/ops-guides/security-training/for-everyone-part-ii), and most recently ["For Everyone Part III" in 2020](/ops-guides/security-training/for-everyone-part-iii). [![Security Training For Everyone](/images/guides/security-training/slides/for_everyone/for_everyone.001.webp)](/ops-guides/security-training/for-everyone) [![Security Training For Everyone (Part II)](/images/guides/security-training/slides/for_everyone_part_ii/for_everyone_part_ii.001.webp)](/ops-guides/security-training/for-everyone-part-ii) [![Security Training For Everyone (Part III)](/images/guides/security-training/slides/for_everyone_part_iii/for_everyone_part_iii.001.webp)](/ops-guides/security-training/for-everyone-part-iii) If you're wondering when we publish the open-source versions, it generally ranges anywhere from a few weeks up to several years after the taining was delivered internally. ## Security Training For Engineers Our "For Engineers" course covers more technical security concepts relevant to those in the PagerDuty engineering department. While the topics are more technical in nature, the training is designed to be understood by anyone, whether you're a seasoned engineer or just starting out in your career. We don't create a new version of this each year, so there is currently only one published version of the course, which you can enjoy by clicking the slide below. [![Security Training For Engineers](/images/guides/security-training/slides/for_engineers/for_engineers.001.webp)](/ops-guides/security-training/for-engineers) ## Posters To add a little more fun to our trainings, we like to advertise them around the PagerDuty offices with some custom movie posters. Everyone usually gets a kick out of them, so we thought it would be fun to share them here too. These are the US versions of the posters. We also make localized ones for our global offices, usually just to misspell "humo(u)r" for each region so that no one feels left out. We haven't gone as far as making a French language version for our Toronto office just yet, but maybe next year. [![Poster for Security Training for Everyone](/images/guides/security-training/2018_for_everyone_poster.webp)](/images/guides/security-training/2018_for_everyone_poster.webp) [![Poster for Security Training for Engineers](/images/guides/security-training/2018_for_engineers_poster.webp)](/images/guides/security-training/2018_for_engineers_poster.webp) [![Poster for Security Training for Everyone Part II](/images/guides/security-training/2019_for_everyone_part_ii_poster.webp)](/images/guides/security-training/2019_for_everyone_part_ii_poster.webp) We've also been known to go a little overboard and make posters which emulate the real posters for various computer/security/social-engineering related movies. See if you can figure out which movie these were inspired by (the image alt-text will give you the answers). [![Poster for Security Training for Everyone Part III (1)](/images/guides/security-training/2020_for_everyone_part_iii_poster.001.webp)](/images/guides/security-training/2020_for_everyone_part_iii_poster.001.webp "Sneakers (1992)") [![Poster for Security Training for Everyone Part III (2)](/images/guides/security-training/2020_for_everyone_part_iii_poster.002.webp)](/images/guides/security-training/2020_for_everyone_part_iii_poster.002.webp "Hackers (1995)") [![Poster for Security Training for Everyone Part III (3)](/images/guides/security-training/2020_for_everyone_part_iii_poster.003.webp)](/images/guides/security-training/2020_for_everyone_part_iii_poster.003.webp "WarGames (1983)") [![Poster for Security Training for Everyone Part III (4)](/images/guides/security-training/2020_for_everyone_part_iii_poster.004.webp)](/images/guides/security-training/2020_for_everyone_part_iii_poster.004.webp "Tron (1982)") [![Poster for Security Training for Everyone Part III (5)](/images/guides/security-training/2020_for_everyone_part_iii_poster.005.webp)](/images/guides/security-training/2020_for_everyone_part_iii_poster.005.webp "Ferris Bueller's Day Off (1986)") [![Poster for Security Training for Everyone Part III (6)](/images/guides/security-training/2020_for_everyone_part_iii_poster.006.webp)](/images/guides/security-training/2020_for_everyone_part_iii_poster.006.webp "Catch Me If You Can (2002)") [![Poster for Security Training for Everyone Part IV](/images/guides/security-training/2021_security_training_poster.webp)](/images/guides/security-training/2021_security_training_poster.webp "They Live (1988)") > **Spotted a Problem?:** Security is hard, and we're not perfect. There may be mistakes or misunderstandings in our training material. If you find a problem, please help us correct it! This project is [open-source on GitHub](https://github.com/pagerduty/security-training) and we appreciate all friendly contributions. --- URL: https://docs.pagerduty.com/ops-guides/security-training/for-engineers # For Engineers This is an open-source version of 'Security Training for Engineers', PagerDuty's internal employee technical security training, open to all PagerDuty employees > **Security Training for Engineers:** This is an [open-source](https://github.com/pagerduty/security-training) version of "Security Training for Engineers", PagerDuty's internal technical security training, open to all PagerDuty employees as part of our continuous security training program. > > Unlike our course [for everyone](/ops-guides/security-training/for-everyone), this course covers more technical topics and is more applicable to those in an engineering role. While it delves into various technical topics, it has been designed in such a way as it should be useful regardless of your skill level, whether you've just started your engineering career, or you've been doing this for years. > > While some of the material we present internally contains sensitive PagerDuty information, the majority consists of generic security lessons, presented in a light-hearted and informative way. Many employees asked for a version of the training they could share with friends and family. This site is the culmination of our efforts to do just that. > > The text presented here is a semi-accurate transcription of how the training was delivered. --- ## Introduction ![001](/images/guides/security-training/slides/for_engineers/for_engineers.001.webp) *001. "Security Training for Engineers, April 2018"* Welcome to "Security Training for Engineers". This talk is specifically geared towards engineers, and is going to be a bit more technical than the [last training](/ops-guides/security-training/for-everyone). If you're not an engineer though, don't worry, you're more than welcome to stay. While the topics will be technical in nature, it should be informative no matter what your skill level is, whether you're just getting started, or are a seasoned engineer with years of experience. For those who've not met me yet, "Hi, I'm Rich". I work on security and incident response, and make lots of silly jokes. You'll get used to it. Anyway, let's get stuck in. --- ## Testimonial ![002](/images/guides/security-training/slides/for_engineers/for_engineers.002.webp) *002. Testimonial quote.* If you've joined PagerDuty in the last year, then this will be your first time going through this particular training course. It's had rave reviews in the past, as you can see here from this completely genuine testimonial quote, which I totally didn't make up in any way. --- ## Classification ![003](/images/guides/security-training/slides/for_engineers/for_engineers.003.webp) *003. Classification ratings for these slides.* Before we delve into the main content, I wanted to give you all a quick reminder of our slide classifications. We went through this at the last training, but the same applies to this one too. Please respect the classifications that are added to these slides and don't share ones which shouldn't be shared. As with our previous training, this one will also be open-sourced so you can share it with friends and family, and the internal version will be available on the wiki along with the recording. --- ## Goal ![004](/images/guides/security-training/slides/for_engineers/for_engineers.004.webp) *004. Goal of the training.* So why are you all here today? The goal of today's training is to give you the opportunity to learn about a variety of common security vulnerabilities that are relevant when developing software. I'm not just going to show you what they are, and how to stop them, but I'm also going to show you how to exploit them too. Exploiting these vulnerabilities is usually the best way to really learn how they work, and is an important part of knowing how to stop them. Plus it's more fun to show you how to exploit them. --- ## Topics ![005](/images/guides/security-training/slides/for_engineers/for_engineers.005.webp) *005. List of topics we'll be covering.* I’m going to be covering a **lot** of different topics. Don't be put off by the quantity here, some I’ll go into quite a bit of depth on, but others I’ll just be touching on briefly. Some of these may already be familiar to you, but hopefully you’ll still learn something new if that's the case. --- ## Warning ![006](/images/guides/security-training/slides/for_engineers/for_engineers.006.webp) *006. Warning sign.* But I want to kick things off with some quick warnings... --- ## Framework ![007](/images/guides/security-training/slides/for_engineers/for_engineers.007.webp) *007. "The framework takes care of that for me..."* I often hear this statement from developers, that their framework of choice takes care of all the nitty gritty security things for them, so they don't need to understand how they work. I'm here to tell you that that is completely not the case. Rails, Akka, Symfony, whatever you use, you can't just blindly assume your framework or library of choice has you covered. Yes, it's convenient that they do all the heavy lifting for you, but you can't just abdicate your responsibility to understand and be able to repair security issues yourself. --- ## Framework Issues ![008](/images/guides/security-training/slides/for_engineers/for_engineers.008.webp) *008. Rails vulnerabilities. [Reference](https://www.cvedetails.com/vulnerability-list/vendor_id-12043/product_id-22568/Rubyonrails-Ruby-On-Rails.html)* Because even though frameworks are great, they are not immune to security issues (Spoiler: No software is immune to security issues). If a new vulnerability is publicly announced, you can't always just sit around and wait for an official patch. You will need the knowledge of how the security vulnerability works so that you can patch it yourself. Because attackers aren't going to wait around, they're going to start exploiting them immediately. Now, I'm certainly not advocating against using frameworks, you definitely should, I'm merely saying that you should never assume the framework will always protect you. --- ## Don't Trust Blindly ![009](/images/guides/security-training/slides/for_engineers/for_engineers.009.webp) *009. Don't trust frameworks blindly.* Basically, you shouldn't blindly trust frameworks. It’s important to understand the underlying principles, so you can tell when the framework isn’t doing what it should, and so you can quickly fix things when it turns out they’re not. --- ## Hackday ![010](/images/guides/security-training/slides/for_engineers/for_engineers.010.webp) *010. It's just for a Hackday.* Another statement I hear occasionally is "It's just temporary for a Hackday", often used as an excuse for attempting to ignore security best practices. --- ## Hackday Security ![011](/images/guides/security-training/slides/for_engineers/for_engineers.011.webp) *011. Hackday security.* Just because it's a Hackday, it doesn't mean you can ignore the rules. I know you want to make something work quickly, and you don't want to mess about with all this "security" stuff. But it's important and should not be ignored. You shouldn't be trying to disable firewall rules for Hackdays (and yes, we do get immediately paged if you try), and you shouldn't use a public code repository to develop your Hackday idea, it's fine to open-source it later, but sometimes you can give away information we don't want to be public yet. Finally, you should never ever be using customer data for your Hackdays, unless you're at the stage where it's getting pushed to production. We went over this on our last training, but I'll reiterate it again, customer data should never, under any circumstances, leave our production environment. --- ## Story Time ![012](/images/guides/security-training/slides/for_engineers/for_engineers.012.webp) *012. Story Time.* With that out of the way, let's jump into a bit of story time. --- ## Critical Bug ![013](/images/guides/security-training/slides/redacted.webp) *013-020. Redacted slides.* > **Redacted Content:** This series of redacted slides went through the story of how a critical security vulnerability was responsibly disclosed to us by a security researcher. We went over how the bug was reported to us, how we confirmed its validity, showed exactly where in our code the bug was (and why it was an issue), and how it was fixed. Due to the sensitive nature of the bug, we've chosen to redact this section. > > One thing worth sharing though is that one of the lessons in the redacted slides was related to the fact the bug was caused by a missing check in the code. This type of bug is very difficult to detect with automated tools, since the existing code itself is perfectly valid, the vulnerability comes from the absence of code. --- ## Every System Has Security Issues ![021](/images/guides/security-training/slides/for_engineers/for_engineers.021.webp) *021. Every system has security issues.* The point I'm trying to make here is that we're not perfect. Every system in the world has security issues. An external researcher with no access to our source code (we hope) was able to find this bug. It's up to all of us to be on the lookout for things like this ourselves too. It's not all doom and gloom though, there was a happy ending here... --- ## Happily Every After ![022](/images/guides/security-training/slides/redacted.webp) *022. Redacted slide.* > **Redacted Content:** This slide showed details of our response to the security issue, including how long it took us to resolve it from the initial report (3h 47m), and some of our correspondence with the researcher (which is the reason for redacting this slide). --- ## SQL Injection ![023](/images/guides/security-training/slides/for_engineers/for_engineers.023.webp) *023. SQL Injection.* OK, let's get started with some actual technical content. Our first main topic is SQL injection. --- ## SQL Injection Definition ![024](/images/guides/security-training/slides/for_engineers/for_engineers.024.webp) *024. SQL injection definition.* What actually is it? This is the simplest one-liner I could come up with. It's any user input which is being _executed_ in an SQL query at runtime. That means the user is able to manipulate a database query based on their input. --- ## Login Page (1) ![025](/images/guides/security-training/slides/for_engineers/for_engineers.025.webp) *025. Login page SQL.* Let's take a look at a quick example, using the query for a hypothetical (and very bad) login page. Seriously, never design a login page like this, I'm just using this as a contrived example to demonstrate. When logging in, this will lookup the user record based on the username and password that is entered. If a result is returned, it will log that person in. Pretty simple, and there are actually login pages out there that work this way (unfortunately). --- ## Login Page (2) ![026](/images/guides/security-training/slides/for_engineers/for_engineers.026.webp) *026. Login page working example.* So let's login with a real user to see how this works under normal conditions. The username and password get put into the query, which will then execute using those values. --- ## Login Page (3) ![027](/images/guides/security-training/slides/for_engineers/for_engineers.027.webp) *027. Login page results.* The SQL statement is valid. The username and password are correct, so a single result is returned for the user, and they would now be logged in as this user. > **Presenter's Comment:** The keen eyed amongst you will have spotted that passwords should never be stored this way. We'll talk about properly storing passwords later. Remember, there's a big red icon in the corner here, never implement a login page like this! OK, so that's all well and good. That's how the developer intended it to work. --- ## Login Page (4) ![028](/images/guides/security-training/slides/for_engineers/for_engineers.028.webp) *028. How an attacker uses it.* But honest people aren't always going to be the ones using such a login form. Some users will be attackers, and they won't play by the rules. So let's say we have an attacker, and they now enter something like this instead. They have a username of `admin`, but a password of `' OR 1=1 --`. As before, the username and password get replaced in the SQL statement. But something different has happened here. Because this code is susceptible to SQL injection, the query being executed has actually changed from what the developer wanted. You can see in the red box here that the SQL query is now different. --- ## Login Page (5) ![029](/images/guides/security-training/slides/for_engineers/for_engineers.029.webp) *029. SQL has changed.* This new SQL statement has an extra condition in it, which means this query will return the row for the admin user, even though the correct password wasn't entered. The query added an `OR 1=1`, which will always evaluate to `true` (since 1 is always equal to 1). Since `OR true` will always be `true`, it doesn't matter what else the user entered, they will automatically get the correct result. This user would now be logged in as an administrator even though they didn't know the password. That's not great. --- ## Login Page (6) ![030](/images/guides/security-training/slides/for_engineers/for_engineers.030.webp) *030. Dropping a table from a login page.* This can get out of hand very quickly. Hopefully you can start to imagine other ways in which this could be dangerous if your code is susceptible to SQL injection. --- ## Bobby Tables ![031](/images/guides/security-training/slides/for_engineers/for_engineers.031.webp) *031. Little Bobby Tables. [Reference](https://xkcd.com/327/)* You may have come across this XKCD comic before, about a boy called Little Bobby Tables. If you didn't know what SQL injection was before, you should hopefully now start to have an idea of what's going on here. --- ## Companies House ![032](/images/guides/security-training/slides/for_engineers/for_engineers.032.webp) *032. UK SQL injection company. [Reference](https://beta.companieshouse.gov.uk/company/10542519)* There’s even a (completely legitimate) company in the UK with an SQL injection as their name. The Companies House site isn't susceptible to SQL injection, so this all works perfectly fine. --- ## Users Shouldn't Modify SQL ![033](/images/guides/security-training/slides/for_engineers/for_engineers.033.webp) *033. Users shouldn't modify SQL.* The key takeaway here is that you should never let your users directly modify the SQL being executed. Users should be providing values only, and not be allowed to alter the structure of your query. If you need to have different queries executed based on some value the user picks, then they should be two distinct queries in your code. --- ## Lookup by ID ![034](/images/guides/security-training/slides/for_engineers/for_engineers.034.webp) *034. Lookup by ID.* Now that we've seen a ridiculous and contrived example, let's look at something a little more realistic. Here's a typical query you might see which looks up a person's name based on their ID. This is a pretty standard pattern you'll see in a lot of codebases. --- ## Typical Usage ![035](/images/guides/security-training/slides/for_engineers/for_engineers.035.webp) *035. How it's intended to be used.* Under normal conditions, you're meant to provide an ID number, and you'll get the user's name in return. This is how it's intended to be used. But if it's susceptible to SQL injection, there's a lot more information you can get out... --- ## Wildcard ![036](/images/guides/security-training/slides/for_engineers/for_engineers.036.webp) *036. Wildcard.* What if we use a wildcard `%` instead of an ID number? Now we'll be able to see everyone's name from your user table. Something like this could allow an attacker to steal a full list of your users. But it's not too bad right? They can only get names and nothing super important like passwords... --- ## Union ![037](/images/guides/security-training/slides/for_engineers/for_engineers.037.webp) *037. Union.* Unfortunately, once you have a single instance of SQL injection, it's pretty much game over and you can grab almost any data that you want. Here we can use a `UNION` to steal the usernames and passwords for every user too. But it's not too bad right? You can't access files on the filesystem or anything... --- ## Load File ![038](/images/guides/security-training/slides/for_engineers/for_engineers.038.webp) *038. Load file.* Like I said, it's pretty much game over once you have an SQL injection point. You could use `LOAD_FILE` to load things from the filesystem too. > **Presenter's Comment:** It's worth noting that this isn't always possible, it will depend on permissions and any extra security the operating system has, but it's feasible at least. --- ## Blind Injection ![039](/images/guides/security-training/slides/for_engineers/for_engineers.039.webp) *039. Blind Injection.* So far this example has required the output to be presented directly to the user in order to be useful. But even if that's not the case, you can still extract information, it just takes a bit longer. There's a technique called "Blind Injection" which can accomplish this. There are two main types... --- ## Boolean ![040](/images/guides/security-training/slides/for_engineers/for_engineers.040.webp) *040. Boolean.* The first is boolean, where you can tell the database to throw an error depending on if a certain value is true or false. It'll take a while, but can easily be scripted to extract data. --- ## Time-Based ![041](/images/guides/security-training/slides/for_engineers/for_engineers.041.webp) *041. Time-Based.* The other is time-based, where you can use the same technique, but add a time-delay and use that to extract the true or false value. Once you have an SQL injection, attackers can be very sneaky in the way data is exfiltrated. --- ## Escaping? ![042](/images/guides/security-training/slides/for_engineers/for_engineers.042.webp) *042. Escaping?* So how can we start to protect against SQL injection? Some folks like to try and add checks that will stop a statement from executing if it has "bad" words like `DROP` in it. Unfortunately, that isn't going to work. Not only would you need to maintain such a blacklist, and be careful to make it case-insensitive, etc. But there's always going to be ways around it. Likewise, you might think that you can just escape all quotes from user input in order to stop the query being modified. Depending on the language you're using, these types of checks can also be bypassed in various sneaky ways. There's always going to be some strange [Unicode](https://en.wikipedia.org/wiki/Unicode) character you hadn't thought of that gets interpreted as a quote, or something silly like that. It's not really worth investing in these types of checks. --- ## Parameter Validation? ![043](/images/guides/security-training/slides/for_engineers/for_engineers.043.webp) *043. Parameter Validation?* What about parameter validation instead? If we only expect a field to contain an integer, we can just reject any input that's not what we expect it to be. This would certainly work for integer fields. If a field only expects alphanumeric characters, again you can just restrict to those characters. This would also work, but you're going to start running into issues where users really do need to enter other characters. What about hyphens in people's names? What if you're running a website like [Stack Overflow](https://stackoverflow.com/) and you need to allow users to enter actual code samples in their comments? Surely there's a better way?! --- ## Use Prepared Statements ![044](/images/guides/security-training/slides/for_engineers/for_engineers.044.webp) *044. Use prepared statements.* We want to use something called "Prepared Statements" to solve this problem. This is one of the most surefire ways to protect against SQL injection. --- ## Prepared Statements? ![045](/images/guides/security-training/slides/for_engineers/for_engineers.045.webp) *045. Prepared statements? [Reference](https://en.wikipedia.org/wiki/Prepared_statement)* But what are they? Well, they're essentially an SQL template, where user values are substituted at runtime and can't modify the query. There's an added bonus here where this can also improve performance, as you can execute similar queries repeatedly with high efficiency. --- ## Prepare ![046](/images/guides/security-training/slides/for_engineers/for_engineers.046.webp) *046. Step 1: Prepare.* Let's look at how prepared statements work. The first step is to "prepare" the query. This is where you define how your SQL statement will look, but the value is left blank, and instead you define a "placeholder" (there are other names that can be used here too). --- ## Optimize ![047](/images/guides/security-training/slides/for_engineers/for_engineers.047.webp) *047. Step 2: Optimize.* The query is then sent to the database management system, where it’s compiled and optimized, but not executed (since it doesn't have any values yet). --- ## Execute ![048](/images/guides/security-training/slides/for_engineers/for_engineers.048.webp) *048. Step 3: Execute.* The final step is when we come to execute the query. We "bind" the placeholders to a real value (or variable), and then tell the DBMS to execute the query with those values. Since the DBMS has already compiled the query, the user values cannot be interpreted as SQL, they can only be used as a value. Which is exactly what we want to stop SQL injection. --- ## Benefits ![049](/images/guides/security-training/slides/for_engineers/for_engineers.049.webp) *049. Benefits.* Because the parameter values are transmitted later using a different protocol, they don't need to be correctly escaped. Assuming the original statement template is not derived from external input, SQL injection cannot occur. We also get some optimization benefits from using this method as it’s compiled once on the DB and executed many times with different data. --- ## Prepared Statement Example ![050](/images/guides/security-training/slides/for_engineers/for_engineers.050.webp) *050. Full prepared statement example.* Here's a quick pseudocode example of how it would all look when tied together. --- ## SQL Injection - Additional Reading ![051](/images/guides/security-training/slides/for_engineers/for_engineers.051.webp) *051. Additional Reading.* SQL injection is one of the more common vulnerabilities that exist, and it can be devastating if exploited. There's lots of nuance involved and lots more I could have talked about. But since we don't have all day, here are some additional reading links if you're interested in understanding more about SQL injection and how to exploit it. The cheat sheets are particularly eye-opening. * [https://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet](https://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet) * [https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet](https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet) * [https://www.sqlinjection.net/time-based/](https://www.sqlinjection.net/time-based/) * [https://www.owasp.org/index.php/Blind_SQL_Injection](https://www.owasp.org/index.php/Blind_SQL_Injection) * [https://ckarande.gitbooks.io/owasp-nodegoat-tutorial/content/tutorial/a1_-_sql_and_nosql_injection.html](https://ckarande.gitbooks.io/owasp-nodegoat-tutorial/content/tutorial/a1_-_sql_and_nosql_injection.html) --- ## Storing Passwords ![052](/images/guides/security-training/slides/for_engineers/for_engineers.052.webp) *052. Storing passwords.* In the first SQL injection example, I showed passwords that were passed to an SQL query in plaintext. That's obviously a very bad way to store passwords. I also talked about how to crack passwords in the [previous training](/ops-guides/security-training/for-everyone). So what's the proper way to store passwords? --- ## Hashing ![053](/images/guides/security-training/slides/for_engineers/for_engineers.053.webp) *053. Hashing. [Reference](https://en.wikipedia.org/wiki/Cryptographic_hash_function)* First, let's quickly reHASH (get it?) what we covered in the last training. A hash will take a value, and give you some seemingly random gibberish as an output. Given the same input, it will always give you the same output. --- ## One-Way ![054](/images/guides/security-training/slides/for_engineers/for_engineers.054.webp) *054. One-Way. [Reference](https://en.wikipedia.org/wiki/Cryptographic_hash_function)* They are essentially a one-way mathematical function. The idea is that it's very easy to take a value, and get a repeatable hash of it. But it's very difficult to have just the hash and reverse it back into the password. Imagine trying to multiply two large prime numbers, multiplication is pretty easy and that wouldn't take too long. But what if you had the final number, and you had to discover which two prime numbers were multiplied to get it? That's going to be much harder to do. That's pretty much what's going on here. So once you have a hashed value, you essentially can't get back to the password, unless you already have a mapping from hash back to password. --- ## Rainbow Tables ![055](/images/guides/security-training/slides/for_engineers/for_engineers.055.webp) *055. Rainbow tables. [Reference](https://project-rainbowcrack.com/table.htm)* This is what a rainbow table is. A precomputed list of hashes back to their original value. It allows you to quickly reverse hashes. You can get rainbow tables for all of the common hashing algorithms in use. I used SHA-1 in all my examples from the last training. --- ## Salting? ![056](/images/guides/security-training/slides/for_engineers/for_engineers.056.webp) *056. Salting?* I said in the previous training that there's something called "salting" which can protect against this type of attack. So what is this "salting" stuff? --- ## Salt Definition ![057](/images/guides/security-training/slides/for_engineers/for_engineers.057.webp) *057. Definition of a salt. [Reference](https://en.wikipedia.org/wiki/Salt_(cryptography))* A salt is some random data that's appended to a password before it's hashed, that's different every time. That means a salt should never be re-used, and shouldn't be the same for every user on your site (I'll talk more about this in a moment). It's very important that the salt is different every time you create or change a password. Why? --- ## Salting ![058](/images/guides/security-training/slides/for_engineers/for_engineers.058.webp) *058. Salting. [Reference](https://en.wikipedia.org/wiki/Salt_(cryptography))* Let's look at a typical example of how it works. I would take the user's password, append a random piece of data to it (that's the salt), and hash it the same way you would have hashed the password. --- ## Salting (2) ![059](/images/guides/security-training/slides/for_engineers/for_engineers.059.webp) *059. Same password, different hash. [Reference](https://en.wikipedia.org/wiki/Salt_(cryptography))* Where this really comes into play is when you have two users with the same password. Since the salt is going to be different every time, that means two users with the same password will now get a completely different hash result at the end of it all. --- ## Database ![060](/images/guides/security-training/slides/for_engineers/for_engineers.060.webp) *060. Database.* In our database, we would store the salt, along with the resulting hash. We store the salt so that we can still verify that a user has entered the correct password. So why bother with a salt at all? If an attacker has access to it, how does this help us? Well, every one of the users in this database has exactly the same password. But because of salts, the resultant hash is different for everyone. This means you can no longer use a rainbow table to crack these passwords, since you'd have to make a custom rainbow table for each user (at which point you may as well just brute force things). --- ## Rainbow Tables Infeasible ![061](/images/guides/security-training/slides/for_engineers/for_engineers.061.webp) *061. Rainbow tables are infeasible thanks to salting.* Thanks to using a salt, we've now made rainbow table attacks completely useless. This is why the salt **must** be different for every single password, otherwise it defeats the point. --- ## Salt is Public ![062](/images/guides/security-training/slides/for_engineers/for_engineers.062.webp) *062. Salt is public.* You’ll notice that the salt was in plaintext in the database I showed, and that’s exactly as it should be. **Salts are not secrets** and should not be treated as such. They’re there to make rainbow table attacks infeasible, nothing more. Remember, that what we're doing here isn’t encryption, the salt is not a secret key or anything like that. --- ## Pepper? ![063](/images/guides/security-training/slides/for_engineers/for_engineers.063.webp) *063. Pepper? [Reference](https://en.wikipedia.org/wiki/Pepper_(cryptography))* There's also another piece of data that can be used to make password storage stronger. This is called a "Pepper", or I've sometimes seen it referred to as a "Site-wide Salt". A pepper is a piece of random data that's appended to every password, similar to how the salt was, however the difference is that the pepper is the same for everyone and isn't stored in the database. The pepper is treated as a secret and is kept on disk, or as part of whatever secret storage solution you happen to be using. Why is a pepper useful? Well, in order to be able to try and brute force any stolen hashes, you’d need not only the database (which has the salt), but also the pepper. If you’ve stolen the database via SQL injection, it’s unlikely (but not impossible) you can also steal the pepper which is stored on disk. It can make it more difficult for an attacker, but it can also make it more difficult for you too. For example, rotating a compromised pepper can be a difficult challenge, and generally you just have to keep track of every pepper you’ve ever had. --- ## Pepper ![064](/images/guides/security-training/slides/for_engineers/for_engineers.064.webp) *064. Pepper.* So if you wanted to use a pepper, the process would now look like this. You take the password, append the salt, append the pepper, and then hash that. That would then be the result you store in your database. Whether you use a pepper or not though, there's still more to do. --- ## Slow Down ![065](/images/guides/security-training/slides/for_engineers/for_engineers.065.webp) *065. Slow down!* We still have a problem...if someone is able to steal the database and the pepper, they are still able to brute force those passwords just by trying every combination. They can't pre-compute them into a rainbow table, but they can do them in realtime. Why is this possible? Because hashing is too fast! So far I've only shown you general purpose hashing functions, MD5, SHA-1, etc. The original purpose of these algorithms is to quickly compute a value so that you can use it to check and verify the integrity of a file. In those cases, you want it to be as fast as possible. But they weren't designed for secure password storage, where speed means that an attacker can try more combinations more quickly. --- ## Slow it Down ![066](/images/guides/security-training/slides/for_engineers/for_engineers.066.webp) *066. Slow it down. [Reference](https://en.wikipedia.org/wiki/Key_stretching)* So there's another step we need to make here. We want to slow down how quickly our hashing works. We typically don't like to slow things down as engineers, but in this case it's warranted. If it takes 1 second for a user to be able to login, the user isn't really going to notice. But an attacker who wants to try to guess passwords, only being able to try 1 every second is going to make it very tedious for them. The way we slow it down is by just running the hashing algorithm multiple times (called rounds). Each iteration should rely on the output of the previous one so that it can't be parallelized. We're not just spinning CPU cycles here, we are actually calculating something. This process is called "Key Stretching". In this example, we're going to run the hash 100,000 extra times. --- ## Key Stretching ![067](/images/guides/security-training/slides/for_engineers/for_engineers.067.webp) *067. Why do key stretching?* Why do we do this? Well, because we’ve just made it 100,000 times harder for an attacker to brute force those passwords offline. Before they could try 100,000 passwords a second. Now they can only try one. For a user, this isn't a big deal, but for an attacker, we've just make it much more painful for them. --- ## Key Stretching (2) ![068](/images/guides/security-training/slides/for_engineers/for_engineers.068.webp) *068. Things get flipped.* Unfortunately, we still have a problem. Hardware is always getting better. What's true today, might not be true in a year's time. An attacker might break out some GPUs and instead of mining Bitcoin, maybe they'll start hashing passwords instead. So how can we keep up? --- ## Adaptive Hashing ![069](/images/guides/security-training/slides/for_engineers/for_engineers.069.webp) *069. Adaptive hashing.* We need to use something called adaptive hashing instead. --- ## Adaptive Hashing Definition ![070](/images/guides/security-training/slides/for_engineers/for_engineers.070.webp) *070. Adaptive hashing definition.* Basically, adaptive hashing is the ability to change the number of rounds as time goes on. But 'rounds' are a strange concept, the speed is based on how fast your CPU is. So let's put this into other terms. --- ## Cost ![071](/images/guides/security-training/slides/for_engineers/for_engineers.071.webp) *071. Cost. [Reference](https://www.tarsnap.com/scrypt/scrypt.pdf)* Instead, what we really care about is the cost, or effort involved. There are algorithms where you can specify a "work factor", or "cost" value. Since what we really care about is how much time and money it's going to take an attacker to crack your passwords. There's a great table here showing the different costs associated with cracking passwords using various different algorithms. PBKDF2, bcrypt, and scrypt are all purpose-built password hashing algorithms. They were designed specifically for passwords, so unlike MD5 or SHA-1, they are purposefully slower. They also do pretty much everything I just talked about automatically. Salting and key stretching are built-in. --- ## Use Bcrypt ![072](/images/guides/security-training/slides/for_engineers/for_engineers.072.webp) *072. Use bcrypt.* So the key takeaway here is to use an adaptive hashing algorithm specifically designed for storing passwords. `bcrypt`, `scrypt`, or `PBKDF2` are all good choices. We use `bcrypt`. It's also important to reevaluate your "cost" value every so often. It's no good just setting a cost factor and leaving it for years, because eventually hardware will catch up. --- ## Bcrypt Example ![073](/images/guides/security-training/slides/for_engineers/for_engineers.073.webp) *073. Bcrypt example.* Here's an example of how to use `bcrypt` in Ruby. That `$` delimeted string it gives you has all of the necessary information as part of it. The algorithm being used `2a`, the cost/work factor `13`, and a salt and resultant hash. So it takes care of all the details for you. --- ## Storing Passwords - Additional Reading ![074](/images/guides/security-training/slides/for_engineers/for_engineers.074.webp) *074. Additional reading.* If you want to know more about these algorithms, here are links to their wiki pages. * [https://en.wikipedia.org/wiki/Bcrypt](https://en.wikipedia.org/wiki/Bcrypt) * [https://en.wikipedia.org/wiki/Scrypt](https://en.wikipedia.org/wiki/Scrypt) * [https://en.wikipedia.org/wiki/PBKDF2](https://en.wikipedia.org/wiki/PBKDF2) --- ## Encryption ![075](/images/guides/security-training/slides/for_engineers/for_engineers.075.webp) *075. Encryption.* OK, it's time for our next topic, encryption. --- ## Encryption Definition ![076](/images/guides/security-training/slides/for_engineers/for_engineers.076.webp) *076. Definition of encryption.* Hopefully you should all be familiar with what encryption is, but if not, encryption is about encoding information in such a way that only authorized parties can read it. --- ## Encryption Comic ![077](/images/guides/security-training/slides/for_engineers/for_engineers.077.webp) *077. XKCD on encryption. [Reference](https://xkcd.com/257/)* The biggest problem with encryption is that it’s very easy to convince yourself your encryption is great. It's easy to come up with an encryption scheme you yourself can't break. It doesn't mean that no one else can. --- ## Don't Write Your Own ![078](/images/guides/security-training/slides/for_engineers/for_engineers.078.webp) *078. Don't write your own.* For this reason, the best encryption advice is to never write your own encryption. Ever (Well.. unless it's actually your job). Leave it to the experts who do it for a living. Use a library, or pre-defined encryption algorithms. This is one area you want to very much leave to the professionals. --- ## Encryption Types ![079](/images/guides/security-training/slides/for_engineers/for_engineers.079.webp) *079. Types of encryption.* There are various different types of encryption, each suitable for different tasks. --- ## Encryption Types Definitions ![080](/images/guides/security-training/slides/for_engineers/for_engineers.080.webp) *080. Plain English.* Let’s try and translate these into plain English. * **Symmetric/Asymmetric** refers to whether the key used to encrypt and decrypt the message is the same or different. So if the same key can both encrypt and decrypt the data, it's symmetric. If they're different, it's asymmetric. * A **block cipher** is a type of encryption where the data is encrypted in chunks. Most of the encryption algorithms you've probably heard about are block ciphers; DES, AES, etc. They also have various different modes of operation, CBC, GCM, etc. I'm not going to go into all the different modes, since we'll be here all day, but you can read more about them on wikipedia. * **Public/Private** key encryption is where you have a private key, and everyone else has a public key. This allows anyone to encrypt a message to you, that only you can decrypt. It also allows you to sign pieces of data, and everyone else can verify that you were the one who signed it. * **Stream ciphers** are where the data is encrypted "on-the-fly" as a raw data stream, rather than in blocks like a block cipher. There are various details and differences between types, and a lot more examples. This is a huge field of study, and as much as I would love to cover it all, we need to stop somewhere. So these are the main types you are likely to come across. We need to use encryption for two important things... --- ## Encryption in Transit ![081](/images/guides/security-training/slides/for_engineers/for_engineers.081.webp) *081. Encryption in transit.* The first is called "encryption in transit"... --- ## Encryption in Transit (2) ![082](/images/guides/security-training/slides/for_engineers/for_engineers.082.webp) *082. Encryption in transit.* The idea is that we want to be sure that if any of our communications are intercepted, they cannot be read. Importantly, we also want to make sure they can't be read in the future even if our keys get leaked. So if someone intercepts our communications now, but doesn't yet have the key to decrypt it, they might store it on the off-chance they do get the key later, then go back and decrypt it when they do. You want to use a technique called "Perfect Forward Secrecy" to prevent that from happening. Everything at PagerDuty is encrypted in transit automatically, we use HTTPS/TLS for all endpoints, and all other communication is encrypted by IPsec in transport mode by default. You need to try very hard to send something unencrypted around our infrastructure. > **Presenter's Comment:** Shameless plug: Two ex-PagerDuty engineers, Doug Barth and Evan Gilman, literally wrote the book on [Zero Trust Networks](https://learning.oreilly.com/library/view/~/9781491962183/), which is the methodology PagerDuty uses for our network. If you're interested in learning more about our IPsec mesh network, [Doug gave a talk on it at Velocity Conf in 2015](https://speakerdeck.com/dougbarth/ipsec-mesh-network-perfect-for-the-cloud). --- ## Encryption at Rest ![083](/images/guides/security-training/slides/for_engineers/for_engineers.083.webp) *083. Encryption at rest.* The next main use of encryption is called "encryption at rest"... --- ## Encryption at Rest (2) ![084](/images/guides/security-training/slides/for_engineers/for_engineers.084.webp) *084. Encryption at rest.* We want to be sure that if someone gains access to our systems, that they cannot access any data while it’s sitting around in our own infrastructure. So we want to be sure that all information is encrypted when it's stored on disk or in S3, etc. You may have heard that your laptops all have "Full Disk Encryption" enabled, this means that your laptops are encrypted at rest. If someone were to yank out the hard disk from your laptop in order to steal information, they wouldn't be able to, since the disks are encrypted. --- ## Should I Encrypt That? ![085](/images/guides/security-training/slides/for_engineers/for_engineers.085.webp) *085. Should I encrypt that?* So what information should you be encrypting at rest and in transit? What’s the most sensitive data we have? (Spoiler alert: it's customer data). --- ## Base64 a Password ![086](/images/guides/security-training/slides/for_engineers/for_engineers.086.webp) *086. You wouldn't base64 a password.* You wouldn’t base64 a password, so don’t store customer data in the clear either. --- ## Data Classification ![087](/images/guides/security-training/slides/for_engineers/for_engineers.087.webp) *087. Data classification.* A quick reminder of our data classification policy. We have three distinct types of data at PagerDuty. * **General Data** is anything that is _intentionally_ available to the public. The key being intentionally. If something gets leaked, it doesn't automatically become general data. * **Business data** is anything used to operate our business. Examples would be our employee list, payroll information, etc. * **Customer data** is any data provided to us by the customer. Customer data is by far the most valuable and protected data we have at PagerDuty, and is subject to our most stringent security rules. --- ## Data Handling ![088](/images/guides/security-training/slides/for_engineers/for_engineers.088.webp) *088. Data handling.* How we handle data depends on what type of data it is. For example, general data does not need to be encrypted, as it's considered public. All other types of data should always be encrypted in transit and at rest however. You can view a more detailed description of our data handling policies on the wiki. > **Redacted Content:** When originally presented, this slide contained links to our internal wiki with more detailed information. Those internal links have been removed from the public version. --- ## Customer Data ![089](/images/guides/security-training/slides/for_engineers/for_engineers.089.webp) *089. Customer data.* So, customer data should always be encrypted in both transit, and at rest. Always. --- ## AWS Encryption ![090](/images/guides/security-training/slides/for_engineers/for_engineers.090.webp) *090. AWS encryption. [Reference](https://aws.amazon.com/blogs/security/tag/server-side-encryption/)* Our automated tooling takes care of most of this for you, but there are some edge cases where you may need to select a specific option to enable it yourself. Especially if you're using new services or tools in AWS, please make sure they're encrypted. It’s usually just a single click, and is super easy to enable. We typically get paged if you create a new unencrypted resource, and your newly created object will likely get automatically terminated and you’ll have to create it again. So save yourself the hassle and always enable encryption. --- ## Third-Party Systems ![091](/images/guides/security-training/slides/for_engineers/for_engineers.091.webp) *091. Third-party systems.* What about third-parties that we need to give our data to? Do they need to have encryption too? Yes, absolutely! Third-parties need to follow the same rules as us. If we encrypt our customer data but a third-part doesn't, that's just as bad as us not doing it. This is why we perform vendor risk assessments, to make sure that our vendors have the necessary security requirements in place to be able to handle our data. If they don't, then we can't use them. So please make sure to get a vendor risk assessment completed before you try and start using a third-party tool. --- ## Encryption - Additional Reading ![092](/images/guides/security-training/slides/for_engineers/for_engineers.092.webp) *092. Additional reading.* Like I said before, encryption is a huge area, and I only really touched the surface here. So here's some additional reading links if you want to learn more. * [http://www.networksorcery.com/enp/data/encryption.htm](http://www.networksorcery.com/enp/data/encryption.htm) * [https://www.owasp.org/index.php/Guide_to_Cryptography](https://www.owasp.org/index.php/Guide_to_Cryptography) * [https://gist.github.com/tqbf/be58d2d39690c3b366ad](https://gist.github.com/tqbf/be58d2d39690c3b366ad) --- ## Secret Management ![093](/images/guides/security-training/slides/for_engineers/for_engineers.093.webp) *093. Caption.* Alright, next topic is Secret Management. --- ## Secret Management Definition ![094](/images/guides/security-training/slides/for_engineers/for_engineers.094.webp) *094. Definition of secret management.* What does that mean? Well, secret management is all about protecting and auditing access to secrets. We want to make sure that no one evil can look at our secrets, but that if they do we have a record of it. We also want to know who's looking at our secrets, even if they're allowed to. --- ## Secrets? ![095](/images/guides/security-training/slides/for_engineers/for_engineers.095.webp) *095. Secrets?* But what do we mean by "secrets"? The best way to manage a secret is to not have one in the first place. But that isn't always possible. A decent rule of thumb is that anything with the words "token", "key", "password", or "secret" in the name should be considered a secret. That doesn't cover all cases, but most things fall under those categories. --- ## ಠ_ಠ ![096](/images/guides/security-training/slides/for_engineers/for_engineers.096.webp) *096. ಠ_ಠ* What we absolutely don't want is secrets hardcoded into our source code. It can be tempting to hardcode things like this, but it's never a good idea. The reason this is bad is that anyone with access to the source code gets access to the secret. Generally, the developers building the software don't need to know the secrets that are used to operate that software. Ideally, you want all that to be automated with humans never even seeing the secrets at all. But at the very least, you want the secrets decoupled from the source code. --- ## Vault ![097](/images/guides/security-training/slides/for_engineers/for_engineers.097.webp) *097. Vault.* So how should secrets be stored? You need a dedicated system for managing them. Just like how you use password managers to manage passwords, you should use a secret manager to manage secrets. We use [Vault](https://www.vaultproject.io/) for secret management at PagerDuty, which allows us to securely store secrets, easily rotate them when necessary, and gives us a full audit log of when they were accessed, and who accessed them. --- ## Vault UI ![098](/images/guides/security-training/slides/for_engineers/for_engineers.098.webp) *098. Vault UI.* You don't need to interact with it on the command-line in a terminal, we have a UI for it installed in all our environments so that you can manage it visually instead. We have plenty of documentation about this on our wiki, so check that out if you're interested in the details. > **Redacted Content:** The internal wiki links have been removed from these public slides. --- ## Use Vault ![099](/images/guides/security-training/slides/for_engineers/for_engineers.099.webp) *099. Use Vault.* The main takeaway here is that we should always be using Vault to store secrets for our applications or systems. Don't hardcode things or come up with any other strange methods of getting secrets into your applications. --- ## Need The Password ![100](/images/guides/security-training/slides/for_engineers/for_engineers.100.webp) *100. "I need the password for..."* On the subject of secrets, I occasionally see messages like this in Slack: _"I need the password for..."_ We should try and get out of this habit, as it not only assumes that we have a shared password for everything (which obviously isn't the case), but it's subconsciously encouraging passwords to be sent over Slack. Very rarely is there a "password" for something that needs to be shared. We should all have individual accounts to things so that we have accountability. So the question should really be _"I need access to..."_ instead. Even then, if a secret needs to be shared, it needs to be done the correct way. --- ## Never Share Secrets Insecurely ![101](/images/guides/security-training/slides/for_engineers/for_engineers.101.webp) *101. Never share secrets over insecure channels.* Remember that secrets should never be shared over insecure communication channels. Slack is an insecure communication channel, so is email. If there's a secret that needs to be shared, it should be in Vault, or in 1Password, or some other dedicated secure secret delivery tool. --- ## Don't Share Secrets ![102](/images/guides/security-training/slides/for_engineers/for_engineers.102.webp) *102. I'll say it again.* I'll say it again, because this really is important. **Do not share secrets on Slack**. --- ## Slack Secrets ![103](/images/guides/security-training/slides/for_engineers/for_engineers.103.webp) *103. Sharing secrets on Slack.* But what happens if you do it accidentally? As shown in this completely made up and totally not real scenario. It can happen, you had something in your clipboard and paste without realizing. By the time you hit enter and spot it, it's too late. Well, don't panic. We all make mistakes. You're not going to get into trouble. I've accidentally posted secrets in chat tools before, I'm sure most people have. What matters is what you do next... --- ## Notify Security ![104](/images/guides/security-training/slides/for_engineers/for_engineers.104.webp) *104. Notify the security team.* ...you need to let the security team know immediately. We'll walk you through how to rotate the credential and get things back to normal. Now, we're not going to do the rotation for you, we're going to show you how to do it yourself. So don't just think you can pass off the work to us :) Importantly, we will never name and shame you if you do something silly like paste a password into Slack. Never be afraid to come to us if you've accidentally done something that's not secure. As anyone who's already done this knows, we keep it to ourselves. We will usually do a post-mortem, but you will never be mentioned by name or any other identifier. We all make mistakes, and our job isn't to make you feel bad if you happen to make one too. --- ## Secrets in Logs ![105](/images/guides/security-training/slides/for_engineers/for_engineers.105.webp) *105. Secrets in logs.* Another part of managing secrets is to make sure they never appear in places they shouldn't. Logs are typically where this happens by accident. You enable some sort of debug-level logging, and all of a sudden tokens, API keys, and passwords start appearing in log files. Even worse, they're not passwords we control, so we can't just rotate them. They're likely to be customer passwords. Which means we'd have to notify those customers to change their credentials. We have automation in place to redact anything that even remotely looks like a secret, but it's not perfect and you shouldn't rely on it. --- ## Be Mindful of What You Log ![106](/images/guides/security-training/slides/for_engineers/for_engineers.106.webp) *106. Be mindful of what you log.* Be mindful of what you're logging, and if it's a secret, don't log it. If you need to do any sanitizing, make sure it happens **before** the log is written to disk or uploaded to our centralized logging tools. --- ## Secret Management - Additional Reading ![107](/images/guides/security-training/slides/for_engineers/for_engineers.107.webp) *107. Additional reading.* If you're interested in learning more about secret management, our very own Max Timchenko wrote up a big overview of various secret managements tools. It's well worth a look. * [https://gist.github.com/maxvt/bb49a6c7243163b8120625fc8ae3f3cd](https://gist.github.com/maxvt/bb49a6c7243163b8120625fc8ae3f3cd) --- ## Cross-Site Scripting ![108](/images/guides/security-training/slides/for_engineers/for_engineers.108.webp) *108. Cross-site scripting.* Our next topic is "Cross-Site Scripting", which you'll usually see abbreviated as XSS. --- ## XSS Definition ![109](/images/guides/security-training/slides/for_engineers/for_engineers.109.webp) *109. XSS definition.* So what is it? Cross-site scripting is all about injecting little bits of code onto web pages that will be viewed by other people. The injected code then gets executed by them without them realizing. It allows an attacker to steal pretty much anything if executed properly. --- ## XSS Example (1) ![110](/images/guides/security-training/slides/for_engineers/for_engineers.110.webp) *110. Awesome website.* Let's look at a quick example. Say I've got a website, where I'm storing some user-defined data. In this case, just a comment. --- ## XSS Example (2) ![111](/images/guides/security-training/slides/for_engineers/for_engineers.111.webp) *111. Enter a malicious comment.* A malicious user enters a comment that contains some JavaScript, which will popup a message saying "hello", and submits that comment to the site. --- ## XSS Example (3) ![112](/images/guides/security-training/slides/for_engineers/for_engineers.112.webp) *112. Uh oh!* If the site is vulnerable to XSS, whenever anyone visits that page, their browser will now show them a popup message saying "hello". So OK, that's kind of annoying, but it's not really that dangerous is it? --- ## Dangerous ![113](/images/guides/security-training/slides/for_engineers/for_engineers.113.webp) *113. It's kind of dangerous.* Actually, yeah, it's pretty dangerous. --- ## Stealing Cookies ![114](/images/guides/security-training/slides/for_engineers/for_engineers.114.webp) *114. Stealing cookies.* Because an attacker could use this to steal all sorts of information, maybe even your cookies (We'll be talking more about what those are later), which means the attacker could login to the website as if they are you, and the website wouldn't know the difference. If they can't steal cookies, they could surreptitiously steal information about your account instead, post comments as you, etc. Whatever JavaScript they can think of, they could execute as you. --- ## Sanitizing Inputs ![115](/images/guides/security-training/slides/for_engineers/for_engineers.115.webp) *115. Sanitizing inputs.* Some common advice for dealing with XSS is to make sure you're sanitizing all your inputs. That's generally good advice anyway, but it won't cover all cases for XSS and can still leave you vulnerable. While validating you have an integer when you expect an integer is good, (or alphanumeric when you expect it, etc). It doesn't always work for other fields, like descriptions or comments. You'll end up stripping things that shouldn't be stripped. For example, what if someone _wants_ to post code as a comment? Sometimes you really do need to present what the user entered verbatim. --- ## Encode on Output ![116](/images/guides/security-training/slides/for_engineers/for_engineers.116.webp) *116. Encode on output.* Instead, the only surefire way to protect against XSS is to encode all user information when it is rendered back to the user, such that it cannot be executed by the browser. All characters would be encoded so the browser displays them as is, and doesn't interpret them as raw code to be executed. --- ## HTML ![117](/images/guides/security-training/slides/for_engineers/for_engineers.117.webp) *117. HTML.* If our previous example was encoding on output, it would have looked like this in the HTML, and would never have shown the popup message to users. That's what we want. --- ## Ember ![118](/images/guides/security-training/slides/for_engineers/for_engineers.118.webp) *118. Ember. [Reference](https://gist.github.com/jamesarosen/478db5faef370eac43fb)* So how do you do this encoding? It depends on the language you're using. We use a lot of Ember here at PagerDuty, and in Ember you just need to wrap variables with `{{ }}`. But, add one more `{ }` to the mix, and it will no longer encode your output. So you need to be very careful that you use the appropriate method. --- ## HAML ![119](/images/guides/security-training/slides/for_engineers/for_engineers.119.webp) *119. HAML. [Reference](https://rorsecurity.info/portfolio/xss-protection-in-haml-templates)* We also have lots of HAML, which similarly can encode output for us. In this case, just make sure to use `=` and not `!=` when outputting a variable. The `!` would disable the encoding and make it susceptible to XSS. --- ## Encode User Data ![120](/images/guides/security-training/slides/for_engineers/for_engineers.120.webp) *120. User supplied data should always be encoded on output.* The key takeaway here is that user supplied data should always be encoded when it's output back to a browser. Never let a user control what can be executed on your site. --- ## Not Just HTML ![121](/images/guides/security-training/slides/for_engineers/for_engineers.121.webp) *121. Not just HTML.* Even though it's what I focussed on here, it's not just HTML output that needs to be encoded. You can't just HTML encode output and put it anywhere, the way you encode needs to change based on where it is. If the user value is getting placed between some `