Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 82 additions & 37 deletions docs/integrations/saas-cloud/airtable.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,57 +21,86 @@ The Airtable app allows you to:

The Airtable app also offers a pre-built dashboard that enables you to start monitoring your Airtable audit logs right away. The Airtable App for Sumo Logic is especially useful for organizations that must comply with regulatory requirements or maintain a high level of security. With the ability to monitor user activity and track changes in real time, you can quickly identify potential issues and respond to security incidents as they occur.

## Log type
:::info
This app includes [built-in monitors](#airtable-monitors). For details on creating custom monitors, refer to the [Create monitors for Airtable app](#create-monitors-for-airtable-app).
:::

The Sumo Logic app for Airtable consumes Audit logs from your Airtable Enterprise account. Audit Logs track user activity and record changes made to the data in the system.
## Log type

To understand how to access detailed records of changes made to the Airtable Enterprise account, refer to the [Airtable Audit logs](https://support.airtable.com/docs/how-to-access-enterprise-audit-logs#interpreting-audit-logs) documentation. This documentation provides information on the different types of logs that are available, how to access them, and what information they contain.
This app uses Sumo Logic’s [Airtable Source](/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/airtable-source/) to collect audit logs from the Airtable platform.

### Sample log messages

<details>
<summary>Click to view the sample log message</summary>
<summary>Audit Log</summary>

```json
{
"enterpriseaccountid": "entdfgc0BXGp",
"originatinguserid": "usrcdagdfQ1B",
"apiname": "PUBLIC_API",
"apiversion": "0.1",
"actionid": "acfdgdfCht9zR",
"client": {
"ipaddress": "100.108.203.58"
},
"context": {
"workspaceid": null,
"applicationid": null,
"tableid": null
},
"request": {
"requestid": "reqesfgstSbadd",
"starttime": "2023-01-18T10:26:45.281Z",
"modelclassname": "enterpriseAccount",
"modelid": "entmDsrgfc0BXGp",
"action": "getEnterpriseAuditLog",
"parametersjson": "{\"enterpriseAuditLogTaskId\":\"ealtossregfCp47\"}"
},
"response": {
"success": true,
"message": null
}
"id": "01JW9KZH4EY2RTXFYFQPP5BMD5",
"timestamp": "2025-05-27T19:37:15.662Z",
"action": "viewBase",
"payloadVersion": "1.0",
"payload": {
"name": "Shipping Dashboard"
},
"modelId": "appmKiUIu71rbi12W",
"modelType": "base",
"origin": {
"ipAddress": "70.117.49.197",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0",
"sessionId": "sapormPAliTbK05ob"
},
"context": {
"enterpriseAccountId": "enttyhkKGivTO3Gva",
"actionId": "actjW4n0Tzk7Mv5zh",
"workspaceId": "wspATf36YDtiAli5y",
"baseId": "appmKiZPu71rbi12W"
},
"actor": {
"type": "user",
"user": {
"id": "usrq5x1aZdf567ExT",
"email": "[email protected]",
"name": "John"
}
}
}
```
</details>

### Sample queries

```sql="Active Team Members"
_sourceCategory="Labs/airtable"
| Json "enterprise_account_id", "originating_user_id", "api_name", "api_version", "action_id", "client.ipaddress", "request.requestid", "request.starttime", "request.modelclassname", "request.modelid", "request.action", "response.success" as enterprise_account_id, originating_user_id, api_name, api_version, action_id, ipaddress, requestid, starttime, modelclassname, modelid, action, success nodrop
| where api_name matches "{{api}}" or isNull(api_name)
| where modelclassname matches "{{model}}" or isNull(modelclassname)
| where action matches "{{action}}" or isNull(action)
| count_distinct (action_id)
```sql="Total Audit Logs"
_sourceCategory="Labs/Airtable"
| Json "id", "action", "actor.type", "actor.user.id", "actor.user.name", "actor.user.email", "modelId", "modelType", "context.actionId", "origin.ipAddress" as audit_id, action, actor_type, user_id, user_name, user_email, model_id, model_type, action_id, ip_address nodrop

// global filters
| where action matches "{{action}}"
| where actor_type matches "{{actor_type}}"
| where model_type matches "{{model_type}}"

// panel specific
| count audit_id
| count
```

```sql="Newly Created Accounts/Users"
_sourceCategory="Labs/Airtable"
| Json "id", "action", "payload.type", "payload.user.id", "payload.user.name", "payload.user.email", "payload.name", "payload.email", "payload.previous.user.role", "payload.current.user.role", "payload.filename", "payload.user.permissionLevel", "payload.current.user.permissionLevel", "actor.type", "actor.user.email", "actor.user.name" as audit_id, action, payload_type, payload_user_id, payload_user_name, payload_user_email, payload_name, payload_email, previous_role, new_role, file_name, user_permission_level, current_user_permission_level, actor_type, actor_email, actor_name nodrop

// global filters
| where action matches "{{action}}"
| where actor_type matches "{{actor_type}}"

// panel specific
| where toLowerCase(action) matches "createserviceaccount" or toLowerCase(action) matches "createuser" or toLowerCase(action) matches "provisionuser"
| if (isNull(actor_name), "unknown", actor_name) as actor_name
| if (isNull(actor_email), "unknown", actor_email) as actor_email
| payload_name as user_name
| payload_email as email_id
| count by _messageTime, action, user_name, email_id, actor_type, actor_email, actor_name
| sort by _messageTime
| fields - _count, _messageTime
```

## Collection configuration and app installation
Expand Down Expand Up @@ -110,7 +139,23 @@ import ViewDashboards from '../../reuse/apps/view-dashboards.md';

### Overview

The **Airtable - Overview** dashboard provides a high-level view of key metrics related to Airtable platform user activity, audits, and execution. It contains widgets that display data such as total audit logs and failed executions, action distribution, and top-performing actions and users. The dashboard also provides information on activity trends over time and user locations. The Audit Log Summary widget provides a quick overview of all platform activity. Overall, the dashboard helps users quickly understand how the platform is used and identify areas for improvement.<br/><img src={useBaseUrl('img/integrations/saas-cloud/airtable-overview.png')} alt="airtable-overview.png" width="600"/>
The **Airtable - Overview** dashboard provides a high-level view of key metrics related to Airtable platform user activity, audits, and execution. It contains widgets that display data such as total audit logs and failed executions, action distribution, and top-performing actions and users. The dashboard also provides information on activity trends over time and user locations. The Audit Log Summary widget provides a quick overview of all platform activity. Overall, the dashboard helps users quickly understand how the platform is used and identify areas for improvement.<br/><img src={useBaseUrl('https://sumologic-app-data-v2.s3.us-east-1.amazonaws.com/dashboards/Airtable/Airtable+-+Overview.png')} alt="airtable-overview.png"/>

### Security Overview

The **Airtable - Security Overview** dashboard provides a high-level view of user activity related to security on the platform. It includes widgets that show data such as newly created accounts, access tokens, and deleted org units and workspaces. The dashboard also tracks changes in authentication methods, downloaded attachments, role updates, and user activity trends. In addition, it highlights users who have been newly assigned admin roles and any collaborator changes, helping to improve overall security monitoring.<br/><img src={useBaseUrl('https://sumologic-app-data-v2.s3.us-east-1.amazonaws.com/dashboards/Airtable/Airtable+-+Security+Overview.png')} alt="airtable-security-overview.png"/>

## Create monitors for Airtable app

import CreateMonitors from '../../reuse/apps/create-monitors.md';

<CreateMonitors/>

### Airtable monitors

| Name | Description | Trigger Type (Critical / Warning / MissingData) | Alert Condition |
|:--|:--|:--|:--|
| `Airtable - Embargoed Geo Locations of Audit Logs` | This alert is triggered when audit logs originating from sanctioned or embargoed regions are detected. This alert helps maintain adherence to legal and regulatory standards. | Critical | Count > 0 |

## Upgrade/Downgrade the Airtable app (Optional)

Expand Down
26 changes: 13 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,22 @@
"@babel/runtime-corejs3": "7.26.10",
"@braintree/sanitize-url": "^6.0.1",
"@docsearch/css": "3.8.2",
"@docusaurus/bundler": "3.8.0",
"@docusaurus/bundler": "^3.8.0",
"@docusaurus/core": "^3.8.0",
"@docusaurus/cssnano-preset": "3.8.0",
"@docusaurus/cssnano-preset": "^3.8.0",
"@docusaurus/faster": "^3.8.0",
"@docusaurus/plugin-client-redirects": "3.8.0",
"@docusaurus/plugin-client-redirects": "^3.8.0",
"@docusaurus/plugin-content-blog": "^3.8.0",
"@docusaurus/plugin-css-cascade-layers": "3.8.0",
"@docusaurus/plugin-debug": "3.8.0",
"@docusaurus/plugin-google-analytics": "3.8.0",
"@docusaurus/plugin-google-gtag": "3.8.0",
"@docusaurus/plugin-google-tag-manager": "3.8.0",
"@docusaurus/plugin-sitemap": "3.8.0",
"@docusaurus/plugin-svgr": "3.8.0",
"@docusaurus/preset-classic": "3.8.0",
"@docusaurus/theme-classic": "3.8.0",
"@docusaurus/theme-search-algolia": "3.8.0",
"@docusaurus/plugin-css-cascade-layers": "^3.8.0",
"@docusaurus/plugin-debug": "^3.8.0",
"@docusaurus/plugin-google-analytics": "^3.8.0",
"@docusaurus/plugin-google-gtag": "^3.8.0",
"@docusaurus/plugin-google-tag-manager": "^3.8.0",
"@docusaurus/plugin-sitemap": "^3.8.0",
"@docusaurus/plugin-svgr": "^3.8.0",
"@docusaurus/preset-classic": "^3.8.0",
"@docusaurus/theme-classic": "^3.8.0",
"@docusaurus/theme-search-algolia": "^3.8.0",
"@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5",
"@eslint/eslintrc": "^1.3.3",
Expand Down
26 changes: 13 additions & 13 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1695,7 +1695,7 @@
fs-extra "^11.1.1"
tslib "^2.6.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/bundler@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.8.0.tgz#386f54dca594d81bac6b617c71822e0808d6e2f6"
integrity sha512-Rq4Z/MSeAHjVzBLirLeMcjLIAQy92pF1OI+2rmt18fSlMARfTGLWRE8Vb+ljQPTOSfJxwDYSzsK6i7XloD2rNA==
Expand Down Expand Up @@ -1773,7 +1773,7 @@
webpack-dev-server "^4.15.2"
webpack-merge "^6.0.1"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/cssnano-preset@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.0.tgz#a70f19e2995be2299f5ef9c3da3e5d4d5c14bff2"
integrity sha512-UJ4hAS2T0R4WNy+phwVff2Q0L5+RXW9cwlH6AEphHR5qw3m/yacfWcSK7ort2pMMbDn8uGrD38BTm4oLkuuNoQ==
Expand Down Expand Up @@ -1849,7 +1849,7 @@
react-helmet-async "npm:@slorber/[email protected]"
react-loadable "npm:@docusaurus/[email protected]"

"@docusaurus/[email protected]":
"@docusaurus/plugin-client-redirects@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.0.tgz#b4309a998e674632a57f5c76bf7cd9751b8e8c06"
integrity sha512-J8f5qzAlO61BnG1I91+N5WH1b/lPWqn6ifTxf/Bluz9JVe1bhFNSl0yW03p+Ff3AFOINDy2ofX70al9nOnOLyw==
Expand Down Expand Up @@ -1926,7 +1926,7 @@
tslib "^2.6.0"
webpack "^5.88.1"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/plugin-css-cascade-layers@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.0.tgz#a0741ae32917a88ce7ce76b6f472495fa4bf576d"
integrity sha512-/VBTNymPIxQB8oA3ZQ4GFFRYdH4ZxDRRBECxyjRyv486mfUPXfcdk+im4S5mKWa6EK2JzBz95IH/Wu0qQgJ5yQ==
Expand All @@ -1936,7 +1936,7 @@
"@docusaurus/utils-validation" "3.8.0"
tslib "^2.6.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/plugin-debug@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.8.0.tgz#297c159ae99924e60042426d2ad6ee0d5e9126b3"
integrity sha512-teonJvJsDB9o2OnG6ifbhblg/PXzZvpUKHFgD8dOL1UJ58u0lk8o0ZOkvaYEBa9nDgqzoWrRk9w+e3qaG2mOhQ==
Expand All @@ -1948,7 +1948,7 @@
react-json-view-lite "^2.3.0"
tslib "^2.6.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/plugin-google-analytics@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.0.tgz#fb97097af331beb13553a384081dc83607539b31"
integrity sha512-aKKa7Q8+3xRSRESipNvlFgNp3FNPELKhuo48Cg/svQbGNwidSHbZT03JqbW4cBaQnyyVchO1ttk+kJ5VC9Gx0w==
Expand All @@ -1958,7 +1958,7 @@
"@docusaurus/utils-validation" "3.8.0"
tslib "^2.6.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/plugin-google-gtag@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.0.tgz#b5a60006c28ac582859a469fb92e53d383b0a055"
integrity sha512-ugQYMGF4BjbAW/JIBtVcp+9eZEgT9HRdvdcDudl5rywNPBA0lct+lXMG3r17s02rrhInMpjMahN3Yc9Cb3H5/g==
Expand All @@ -1969,7 +1969,7 @@
"@types/gtag.js" "^0.0.12"
tslib "^2.6.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/plugin-google-tag-manager@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.0.tgz#612aa63e161fb273bf7db2591034c0142951727d"
integrity sha512-9juRWxbwZD3SV02Jd9QB6yeN7eu+7T4zB0bvJLcVQwi+am51wAxn2CwbdL0YCCX+9OfiXbADE8D8Q65Hbopu/w==
Expand All @@ -1979,7 +1979,7 @@
"@docusaurus/utils-validation" "3.8.0"
tslib "^2.6.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/plugin-sitemap@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.0.tgz#a39e3b5aa2f059aba0052ed11a6b4fbf78ac0dad"
integrity sha512-fGpOIyJvNiuAb90nSJ2Gfy/hUOaDu6826e5w5UxPmbpCIc7KlBHNAZ5g4L4ZuHhc4hdfq4mzVBsQSnne+8Ze1g==
Expand All @@ -1994,7 +1994,7 @@
sitemap "^7.1.1"
tslib "^2.6.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/plugin-svgr@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.0.tgz#6d2d43f14b32b4bb2dd8dc87a70c6e78754c1e85"
integrity sha512-kEDyry+4OMz6BWLG/lEqrNsL/w818bywK70N1gytViw4m9iAmoxCUT7Ri9Dgs7xUdzCHJ3OujolEmD88Wy44OA==
Expand All @@ -2008,7 +2008,7 @@
tslib "^2.6.0"
webpack "^5.88.1"

"@docusaurus/[email protected]":
"@docusaurus/preset-classic@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.8.0.tgz#ac8bc17e3b7b443d8a24f2f1da0c0be396950fef"
integrity sha512-qOu6tQDOWv+rpTlKu+eJATCJVGnABpRCPuqf7LbEaQ1mNY//N/P8cHQwkpAU+aweQfarcZ0XfwCqRHJfjeSV/g==
Expand All @@ -2029,7 +2029,7 @@
"@docusaurus/theme-search-algolia" "3.8.0"
"@docusaurus/types" "3.8.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/theme-classic@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.8.0.tgz#6d44fb801b86a7c7af01cda0325af1a3300b3ac2"
integrity sha512-nQWFiD5ZjoT76OaELt2n33P3WVuuCz8Dt5KFRP2fCBo2r9JCLsp2GJjZpnaG24LZ5/arRjv4VqWKgpK0/YLt7g==
Expand Down Expand Up @@ -2079,7 +2079,7 @@
tslib "^2.6.0"
utility-types "^3.10.0"

"@docusaurus/[email protected]":
"@docusaurus/[email protected]", "@docusaurus/theme-search-algolia@^3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.0.tgz#21c2f18e07a73d13ca3b44fcf0ae9aac33bef60f"
integrity sha512-GBZ5UOcPgiu6nUw153+0+PNWvFKweSnvKIL6Rp04H9olKb475jfKjAwCCtju5D2xs5qXHvCMvzWOg5o9f6DtuQ==
Expand Down